python多处理队列实现

飞行的斑马1

我无法理解如何在下面的多处理示例中实现队列。基本上,我希望代码能够:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章