2013-07-28 6 views
1

Возможно ли запустить некоторые процессы и установить процесс нереста, чтобы подождать, пока не закончится процесс порождения? Ниже приведен пример, который я использовал.python многопроцессорный набор нерестится процесс ожидания

import multiprocessing 
import time 
import sys 

def daemon(): 
    p = multiprocessing.current_process() 
    print 'Starting:', p.name, p.pid 
    sys.stdout.flush() 
    time.sleep(2) 
    print 'Exiting :', p.name, p.pid 
    sys.stdout.flush() 

def non_daemon(): 
    p = multiprocessing.current_process() 
    print 'Starting:', p.name, p.pid 
    sys.stdout.flush() 
    print 'Exiting :', p.name, p.pid 
    sys.stdout.flush() 

if __name__ == '__main__': 
    d = multiprocessing.Process(name='daemon', target=daemon) 
    d.daemon = True 

    n = multiprocessing.Process(name='non-daemon', target=non_daemon) 
    n.daemon = False 

    print "start main" 
    d.start() 
    time.sleep(1) 
    n.start() 
    print "stop main" 

напечатает

start main 
Starting: daemon 2809 
stop main 
Starting: non-daemon 2810 
Exiting : non-daemon 2810 

в то время как я хотел бы иметь:

start main 
messages from other services 
stop main 

ответ

5

d.join() will block the main thread, пока d отделки. Таким образом, чтобы получить заказ заявлений печати вы желаете, поставить join сек до print "stop main":

print "start main" 
d.start() 
time.sleep(1) 
n.start() 
d.join() 
n.join() 
print "stop main" 
+0

@danizgod: 'join' это обычное название для такого рода действий, так что вы также найдете' join' в 'Thread' и в' Queue' –

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