繁体   English   中英

对进程池使用带有回调函数的 apply_async

[英]Using apply_async with callback function for a pool of processes

我试图了解多进程池的工作原理。 在下面的编程中,我创建了一个包含 4 个进程的池。

我用一个回调函数调用apply_async ,该函数应该更新一个result_list apply_async的列表

import Queue
from multiprocessing import Process
from multiprocessing import Pool

result_list = []

def foo_pool(q): #Function for each process
    print "foo_pool" 
    if(q.qsize() > 0):
        number = q.get()
    return number * 2

def log_result(result):
    # This is called whenever foo_pool(i) returns a result.
    # result_list is modified only by the main process, not the pool workers.
    result_list.append(result)

if __name__ == "__main__": 
    q = Queue.Queue()
    for i in range(4):
        q.put(i + 1) #Put 1..4 in the queue

    p = Pool(4)
    p.apply_async(foo_pool, args = (q, ), callback = log_result)

我意识到我不需要在这里使用队列。 但是我正在为另一个需要我使用队列的程序测试这个。 当我运行程序时,函数 foo_pool 没有被调用。 不执行打印语句print "foo_pool" 为什么是这样?

粗略地说,apply_async 只调度异步任务,但不运行它。 您需要调用p.close()p.join()来触发执行或r = p.apply_async()r.get()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM