我无法理解如何在下面的多处理示例中实现队列。基本上,我希望代码能够:
1)生成2个进程(完成)
2)将我的id_list分成两部分(完成)
3)让每个进程遍历列表,打印出每个项目,并且仅在完成列表时关闭。我知道我必须实现某种类型的排队系统,并将其传递给每个工人,但是我不确定如何做到这一点。任何帮助将非常感激。
from multiprocessing import Pool,Queue
id_list = [1,2,3,4,5,6,7,8,9,10]
def mp_worker(record):
try:
print record
sleep(1)
except: pass
print "worker closed"
def mp_handler():
p = Pool(processes = 2) #number of processes
p.map(mp_worker, id_list) #devides id_list between 2 processes, defined above
p.close()
p.join()
mp_handler()
注意-该代码将“工人关闭”打印10次。希望此语句仅打印两次(每个工作人员一次,从id_list打印出5个数字后,每个工作人员一次)
这对我有效(在Python 3上)。我没有使用池,而是产生了自己的两个过程:
from multiprocessing import Process, Queue
from time import sleep
id_list = [1,2,3,4,5,6,7,8,9,10]
queue = Queue()
def mp_worker(queue):
while queue.qsize() >0 :
record = queue.get()
print(record)
sleep(1)
print("worker closed")
def mp_handler():
# Spawn two processes, assigning the method to be executed
# and the input arguments (the queue)
processes = [Process(target=mp_worker, args=(queue,)) for _ in range(2)]
for process in processes:
process.start()
print('Process started')
for process in processes:
process.join()
if __name__ == '__main__':
for id in id_list:
queue.put(id)
mp_handler()
虽然要处理的元素的长度是硬编码的。但这可能是mp_worker方法的第二个输入参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句