основной поток не будет выполняться до завершения дочернего потока

#python #multithreading

Вопрос:

В принципе, у меня есть программа, в которой я хочу создать поток для выполнения определенной функции рядом с основным потоком. Но в python кажется, что когда я создаю поток, пока поток создания не будет завершен, выполнение не передается в основной поток.

См. Следующий пример:

 import threading
import time


def testing():
    time.sleep(30)


wt = threading.Thread(target=testing, name="test", daemon=True)
print("Starting thread")
wt.start()
wt.join()
print("do other stuff next to above thread")
 

Если вы запустите вышеуказанную программу, пока функция тестирования не будет завершена, основная программа не будет распечатана do other stuff next to above thread .

Не уверен, что мне не хватает какого-то параметра или чего-то еще, но может ли кто-нибудь сказать мне, как создать поток, который позволит основной программе продолжать выполнение?

Комментарии:

1. wt.join() явно ожидает wt окончания. Основной поток выполняется параллельно, но он делает то, что вы ему сказали: ждет wt окончания. Переместитесь wt.join() вниз по строке, и вместо "do other stuff ..." этого сразу же появится основной поток.


Ответ №1:

Вызов wt.join() заставляет скрипт останавливаться и ждать завершения wt. Если вы хотите запустить другие вещи, пока wt работает, не звоните wt.join() до позднего времени.

Попробуйте этот код, чтобы увидеть:

 import threading
import time

def testing():
    print('in testing()')
    time.sleep(5)

wt = threading.Thread(target=testing, name="test", daemon=True)
print("Starting thread")
wt.start()
print("do other stuff next to above thread")
wt.join()
print('after everything')
 

Комментарии:

1. В основном это то, что сказал Тим Питерс.