в Thread на python не работают два потока

Не могу понять, почему не работают 2 функции параллельно. Если без while True, то выполняются один раз и в Thread вроде и необходимости нет, а мне нужно что бы они одновременно работали.

from threading import Thread
import time

def first():
    while True:
        print('первая функция')
        time.sleep(2)

def second():
    while True:
        print('вторая функция')
        time.sleep(2)

thread1 = Thread(target=first())
thread2 = Thread(target=second())
thread1.start()
thread2.start()


Ответы (2 шт):

Автор решения: DeMeNToR

Скобки не нужны. Когда присутствуют скобки, то основной поток не идет дальше, а затыкается на while true. По этой причине там нету скобок. Довольно много сторонних библиотечных функций работают так же.

from threading import Thread
import time

def first():
   while True:
       print('первая функция')
       time.sleep(2)

def second():
   while True:
       print('вторая функция')
       time.sleep(2)

thread1 = Thread(target=first)#####
thread2 = Thread(target=second)#####
thread1.start()
thread2.start()
→ Ссылка
Автор решения: CrazyElf

Сразу две типичных ошибки:

  • передача в тред не ссылки на функцию (название функции без скобок), а результата вызова функции
  • отсутствие ожидания окончания выполнения тредов (потоки завершаются вместе с основным кодом, почти сразу после запуска, хотя это зависит от среды выполнения)

Код должен быть таким:

from threading import Thread
import time

def first():
    while True:
        print('первая функция')
        time.sleep(2)

def second():
    while True:
        print('вторая функция')
        time.sleep(2)

thread1 = Thread(target=first)  # <- передаём ссылку на функцию, а не вызываем её
thread2 = Thread(target=second) # <- передаём ссылку на функцию, а не вызываем её
thread1.start()
thread2.start()
thread1.join() # <- ждём окончания выполнения порождённого потока
thread2.join() # <- ждём окончания выполнения порождённого потока

Вывод:

первая функция
вторая функция
первая функция
вторая функция
первая функция
вторая функция
...
→ Ссылка