繁体   English   中英

python池不按列表中的每个项目运行函数

[英]python pool doesnt run function by each item in a list

我尝试将池用于多处理目的。 检查我的代码:

def func1(x):
    print x
if __name__ == "__main__":
    myList = ["111","222","333","444"]
    p = Pool(processes=4)
    res1 = p.map(func1,myList)

我认为出口必须是:

222
111
333
444

它提供了什么:

3332
122411
44

我在这里做错了什么?

正如 Kounis 在评论中所说, Pool创建了一组用于异步任务处理的进程。 此外, Pool.map 文档明确表示处理将是并行的

实际上,由于您正在创建一个具有 4 个工作进程的Pool ,当您发布 4 个元素的map时,每个元素都会立即由一个工作进程处理。 因此, print x s 会同时执行。

您的代码没有任何问题; 它完全符合预期。

如果您认为无论先执行什么操作,它都应该阻塞所有其他操作,直到完成,这可能会让您感到困惑。 幸好这不是真的,因为如果是这样,它就不是并行编程。 您正在启动 4 个并行进程,这些进程都写入标准输出 ( stdout ) 而不考虑优先级,因此您创建了某种可以任意解决的竞争条件。

尝试写入 4 个单独的文件而不是 stdout(请参阅下面的代码),您将更清楚地看到并行代码的结果; 这些文件是同时生成的而不是串行生成的。

def func1(x):
    with open('file_{}'.format(x), w) as f:
        f.write(x)

if __name__ == "__main__":
    myList = ["111","222","333","444"]
    p = Pool(processes=4)
    res1 = p.map(func1,myList)

暂无
暂无

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

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