2014-11-13 5 views
0

Я работаю над скриптом Python, и мне нужна помощь. Этот скрипт работает очень хорошо и дает мне результаты, которые мне нужны, но сценарий не выходит из-за того, что p-процесс все еще запущен. Как я могу это исправить?Как закрыть этот цикл?

Позвольте мне сказать, что в функции run_up это должен быть цикл while. Это упрощенная версия того, что я на самом деле пытаюсь сделать, и цикл for не будет работать для того, что мне нужно.

from multiprocessing import Process, Pipe 


def run_up(conn): 
    i = 0 
    while True: 
     conn.send(i) 
     i += 1 
    conn.close() 


def div_check(): 
    while True: 
     v = parent_conn.recv() 
     if v > 95: 
      break 
     elif v % 5 == 0: 
      print '%i is divisible by 5' % v 

if __name__ == '__main__': 
    parent_conn, child_conn = Pipe() 
    p = Process(target=run_up, args=(child_conn,)) 
    p.start() 
    div_check() 
    p.join() 
+0

Следует ли принудительно завершить детский процесс или продолжить его? – sergzach

ответ

0

Вы можете использовать Event. Таким образом, вы можете сделать while not event.is_set() вместо while True. И в другом процессе, когда вам нужно закрыть его, сделайте event.set().

+0

Спасибо за помощь, все работает ужасно сейчас – Chris

0

Ваша функция run_up имеет бесконечный цикл. Это означает, что дочерний процесс никогда не прекратится, поэтому вы будете заблокированы на join навсегда.

Если вы знаете, когда его прекратить, это исправит вашу проблему. В противном случае вам может понадобиться сделать что-то вроде ответа @ user3267581, чтобы общаться между процессами.

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