我试图在Python的多处理库中使用队列。在执行下面的代码之后(print语句可以工作),但是在我对队列调用join之后,进程不会退出,并且仍然存在。如何终止其余进程?
谢谢!
def MultiprocessTest(self):
print "Starting multiprocess."
print "Number of CPUs",multiprocessing.cpu_count()
num_procs = 4
def do_work(message):
print "work",message ,"completed"
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = multiprocessing.JoinableQueue()
for i in range(num_procs):
p = multiprocessing.Process(target=worker)
p.daemon = True
p.start()
source = ['hi','there','how','are','you','doing']
for item in source:
q.put(item)
print "q close"
q.join()
#q.close()
print "Finished everything...."
print "num active children:",multiprocessing.active_children()
试试这个:
在加入进程之前必须清除队列,但是q.empty()不可靠。
清除队列的最好方法是计算成功获取或循环的次数,直到收到一个sentinel值,就像一个具有可靠网络的套接字一样。
你的工作人员需要一个哨兵来终止,否则他们只能坐在块读上。请注意,使用Q上的sleep而不是P上的join可以显示状态信息等。
我首选的模板是:
相关问题 更多 >
编程相关推荐