【发布时间】:2017-02-08 15:46:14
【问题描述】:
我正在尝试使用 multiprocessing 在 python 中并行化一些 Web 请求,但似乎有时我发送给 map 的所有功能都没有完成。
无论我使用的是 python 2 还是 3,这些结果都会出现。
测试脚本:
#!/usr/bin/env python
import multiprocessing
def my_print(string):
print(string)
all_strings = ["alpaca", "bear", "cat", "dog", "elephant", "frog"]
pool = multiprocessing.Pool()
pool.map(my_print, all_strings)
我是这样运行的:
for i in `seq 1 50`; do ./test.py | wc -l; done | sort | uniq -c
我的结果将如下所示:
6 5
44 6
...所以大部分时间该函数的所有 6 个执行都在运行,但偶尔,只有 5 个会运行,直到整个脚本完成执行。我希望结果是50 6(也就是每次运行都会执行所有函数)。
文档https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing.Pool.map 说It blocks until the result is ready. 我认为这意味着All functions will complete before we move to the next line of code。
我理解错了吗?使用池是否需要您始终调用pool.close() 和pool.join() 以确保任务完成?
编辑:我在 AWS 上运行,如果这有任何明显的不同 - 一位同事告诉我我应该提到这一点。
提前非常感谢!
【问题讨论】:
标签: python python-multiprocessing