[英]Python multiprocessing get the results
我正在尝试了解Python多处理模块。 下面的代码创建4个进程,然后尝试运行函数f(x)
。
问题
pool.apply_async
将返回什么,它将是作业中的打印语句还是该方法返回的内容? 当我执行此代码时,它仅显示100,但不显示其他值。
from multiprocessing import Pool
def f(x):
print x*x
return x*x
if __name__ == '__main__':
result = []
pool = Pool(processes=4)
result.append(pool.apply_async(f, [10]))
out = map(lambda x: x.get(), result)
您创建的池有4个可用的进程。 然后,您只需完成一项工作,便将其分配给其4名工人之一。 如果您给它做更多的工作,它将使用更多的工人。
实际上,您只在这里提交一个任务:参数为tuple (10,)
的函数f
,意味着您仅在单个worker中执行f(10)
。 如果您实际提交了4个以上的进程,则Pool
将始终最多同时执行4个任务。 一项任务完成后,将开始执行挂起的任务来替换它,直到没有剩余任务为止。 还要注意,整个过程将使用相同的四个过程。 它们在完成任务后不会重新启动,除非您在创建Pool
时提供maxtasksperchild
关键字参数。
apply_async
将返回一个AsyncResult
对象,一旦可用,该对象可用于获取任务的结果。 您可以通过在AsyncResult
对象上调用get()
来做到这一点,因此out
列表将包含您对f
的一次调用的返回值。 您在worker进程中print
的内容将像在主进程中运行时一样显示在stdout中,但不会在任何地方捕获。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.