#python #multithreading #python-multithreading
Вопрос:
В настоящее время я использую поток демона в Python, чтобы постоянно обнаруживать части экрана в фоновом режиме, пока выполняются другие более важные функции. testImToStr
находится в том же файле, что и остальная часть кода, который я использую.
def testImToStr():
while True:
pospro.imagetoString();
doImageToString = threading.Thread(target=testImToStr, args=(), daemon=True)
doImageToString.start()
while True:
#other stuff i was too lazy to copy over
Эта версия работает так же, как и обработка изображений, и все остальное в цикле while.
Однако тогда целевой поток находится в другом модуле:
doImageToString = threading.Thread(target=pospro.loopedImToStr, args=(), daemon=True)
doImageToString.start()
while True:
#other stuff i was too lazy to copy over
Другой модуль:
def loopedImToStr():
while True:
imagetoString()
def imagetoString():
#stuff here
Он только зацикливает целевой поток и не запускает цикл while в файле, который изначально создал поток. Как получается, что оба цикла выполняются, когда поток находится в том же файле, что и цикл, но только поток запускается, когда они находятся в разных файлах?
Комментарии:
1. самая распространенная ошибка —
target
должно быть имя функции без()
(так называемойcallback
)-target=pospro.loopedImToStr
— и позжеThread
будет использоваться()
для ее запуска.
Ответ №1:
Я думаю, что вся ваша проблема заключается в самой распространенной ошибке — target
должно быть имя функции без ()
— так называемой callback
Thread(target=pospro.loopedImToStr, daemon=True)
и позже Thread.start()
будет использовать ()
для его запуска.
В своем коде вы testImToStr()
сразу запускаете, как
result = testImToStr()
doImageToString = threading.Thread(target=result, ...)
таким testImToStr()
образом, блокируется весь код, и он не может запустить другой цикл.