в 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() # <- ждём окончания выполнения порождённого потока
Вывод:
первая функция
вторая функция
первая функция
вторая функция
первая функция
вторая функция
...