2015-08-21 2 views
2

Я пытаюсь обнять эту голову. Я не нашел слишком много хороших примеров в Интернете, где я четко вижу, что происходит с многопроцессорной обработкой. Я использую python 2.7 То, что я пытаюсь сделать, это заставить скрипт python прослушивать входные данные, а затем действовать на него, если он получен, но все еще выполняет задачи, чувствительные к времени. Поэтому я не могу прослушивать прерывание потока остальной части скрипта.Python 2.7 Multiprocessing

Вот мои настройки:

def listen_process(): 
    while 1 < 2: 
     print "blue" 

q = multiprocessing.Process(target=listen_process()) 
q.start() 

print red 

Я ожидал бы мой выход выглядеть примерно так:

blue 
blue 
red 
blue 
... 

вместо этого, все это я получаю

blue 
blue 
blue 
... 

Я только получить красный, когда Я прерываю его.

В реальном коде я делаю os.system вызов в новый файл, который по существу делает в то время цикла, но я не могу понять, почему вызов другой файл будет иметь никакого значения ...

+0

Код, который вы предоставили, ничего не выводит –

+2

Вы хотите, 'target = listen_process', а не' target = listen_process() '. – dano

+0

Вы имели в виду 'print" red "'? Также я понятия не имею, почему он будет печатать 'blue', поскольку' 1> 2' оценивает 'False'? –

ответ

4

проблема лежит в этой строке:

q = multiprocessing.Process(target=listen_process()) 

что происходит, что выражение цели = listen_process() не присваивает функцию listen_process к ключевому слову аргумента слушать, а скорее Асся gns результат вызова функции - target.

Это означает, что listen_process вызывается в основном потоке до того, как будет запущен второй. Это, конечно, не то, что вы хотите.

Изменить что линия для:

q = multiprocessing.Process(target=listen_process) 

И вы будете в порядке.

+0

Большое спасибо! Я бы никогда этого не заметил. Я смотрел на это часами Спасибо! – Twitchykid