Fly*_*ra1 2 python queue multiprocessing
我无法理解如何将队列实现到下面的多处理示例中。基本上,我希望代码:
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()
Run Code Online (Sandbox Code Playgroud)
注意 - 代码打印出“工人关闭”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()
Run Code Online (Sandbox Code Playgroud)
尽管要处理的元素的长度是硬编码的。但它可能是 mp_worker 方法的第二个输入参数。
| 归档时间: |
|
| 查看次数: |
7383 次 |
| 最近记录: |