繁体   English   中英

Python多处理获得结果

[英]Python multiprocessing get the results

我正在尝试了解Python多处理模块。 下面的代码创建4个进程,然后尝试运行函数f(x)

问题

  1. 我正在创建4个流程,但是要提交多个任务(f,[10])。 该模块是否会随时自动每4个进程运行一次?
  2. 我将结果捕获在列表中。 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.

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