0

Мне нужно запустить поток в фоновом режиме, но результат, похоже, следует за потоком, а не вставляется в main. У меня есть что-то вроде этого:потоки python, многопоточность с threading.thread

import threading 

def work() 
    while True: 
    do stuff 

def recieve() 
    while True: 
    await instruction 

#main 

recieve() 
if instruction == "do work" 
    threading.Thread(target=work()).start() 

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

Почему это? Что не так?

Большое спасибо

+0

Бегущий код будет очень полезен. Я уверен, что falsetru на правильном пути, так как показано, что ваша работа() вызывается в основном потоке, порожденный поток будет пытаться запустить вызываемый * возвращенный * из работы(), который не то, что вы хотите здесь , – AdamKG

ответ

1

получить() никогда не закончится из-за бесконечного цикла; нить не запускается.

Начать сначала.

if instruction == "do work": 
    threading.Thread(target=work).start() 
recieve() 

() и падение от threading.Thread(target=work()).start(). work() сделать work функция call run в основной теме.

+0

Спасибо за ответ, я действительно не объяснил это в коде правильно, инструкции получены нормально и обработаны, однако, когда получена инструкция «выполнить работу», я пытаюсь создать нить, нерестование потока кажется успешным, но поток имеет фокус, а не возвращается, чтобы получить(), если вы знаете, что я имею в виду – user2625871

+0

Я упал(), и у нас есть успех, спасибо. Тем не менее, я использую сигнал, который не будет запускаться в потоках LOL. Вернуться к доске для рисования – user2625871

Смежные вопросы