2013-07-17 5 views
1

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

from multiprocessing import Process, Pipe 
    from threading import Thread 
    import time 

    Alive = True 

    def listener_thread(conn): #listens for kill from main 
     global Alive 
     while True: 
     data = conn.recv() 
     if data == "kill": 
      Alive = False #value for kill 
      break 

    def subprocess(conn): 
     t = Thread(target=listener_thread, args=(conn,)) 
     count = 0 
     t.start() 
     while Alive: 
       print "Run number = %d" % count 
       count = count + 1 


    def testprocess(conn): 
    t = Thread(target=listner_thread, args=(conn,)) 
    count = 0 
    t.start() 
    while Alive: 
      print "This is a different thread run = %d" % count 
      count = count + 1 

    parent_conn, child_conn = Pipe() 
    p = Process(target=subprocess, args=(child_conn,)) 
    p2 = Process(target=testprocess, args=(child_conn,)) 
    runNum = int(raw_input("Enter a number: ")) 
    p.start() 
    p2.start() 
    time.sleep(runNum) 
    parent_conn.send("kill") #sends kill to listener thread to tell them when to stop 
    p.join() 
    p2.join() 

ответ

2

Опечатка в testprocess делает функцию бросить раньше.

listner_thread должно быть listener_thread.

Если закомментировать subprocess связанный код и запустить код, вы увидите следующее сообщение об ошибке:

Process Process-1: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap 
    self.run() 
    File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run 
    self._target(*self._args, **self._kwargs) 
    File "t.py", line 25, in testprocess 
    t = Thread(target=listner_thread, args=(conn,)) 
NameError: global name 'listner_thread' is not defined 
+0

Ого это было прямо передо мной. Теперь они оба работают, но процесс бесконечно возвращается к отладке благодаря! –

+1

@KyleSponable, BTW, вам нужно дважды вызвать 'parent_conn.send (« kill »)'. – falsetru

+0

, поэтому мне нужно было бы назвать это столько раз, сколько у меня есть открытые темы? –

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