[英]python multiprocessing pool.map not blocking?
我正在尝试使用multiprocessing
在 python 中并行化一些 web 请求,但似乎偶尔,我发送到map
所有函数都没有完成。
无论我使用的是 python 2 还是 python 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 上运行,如果这有任何明显的不同 - 一位同事告诉我我应该提到这一点。
首先十分感谢!
所有工作人员都运行他们的函数并在map
返回之前返回任何值。 那是真实的。 但这并不意味着您会立即看到所有字符串。
您有多个工作进程试图写入同一个文件/终端。 要完成这项工作,您可能必须在工作进程中的每个print()
之后import sys
并调用sys.stdout.flush()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.