我正在尝试了解如何在Python 3.2.2中使用concurrent.futures
模块,并且一直在使用文档中的示例。当我试图运用我的理解时,我自己的例子失败了。我希望有人能帮助我走上正轨!
我希望能够设置多个并发但异步运行的进程。我的流程不会返回任何内容。为了模拟这个,我写了一个简单的例子:
import concurrent.futures
fred = [1,2,3,4,5,6,7,8,9,10]
def f(x):
print(x * x)
def main():
with concurrent.futures.ProcessPoolExecutor() as executor:
for num in fred:
executor.submit(f, num)
if __name__ == "__main__":
main()
此代码运行(在4核Windows XP框上)并返回:
1 4 9 16 25
......但随后挂起。
显然我做错了什么。那么,在流程池中运行Python的正确方法是什么?我不想使用executor.map
方法,因为我的流程没有任何回报。
或者......我是否必须通过让流程返回True
或False
(或其他内容)来伪造它?
谢谢!
答案 0 :(得分:2)
我不太明白为什么你不想使用executor.map
...我尝试了一个没有返回任何东西的函数(实际上是你的f
函数)和它工作得很好......
现在,当您使用map
运行它时,它实际上不会打印值,但这是一个打印值的f
函数版本:
import concurrent.futures
fred = [1,2,3,4,5,6,7,8,9,10]
def f(x):
return x * x
with concurrent.futures.ProcessPoolExecutor() as executor:
for num in executor.map(f, fred):
print(num)