试图了解Python的Concurrent.Futures模块

时间:2011-11-10 14:35:40

标签: python multithreading concurrency

我正在尝试了解如何在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方法,因为我的流程没有任何回报。

或者......我是否必须通过让流程返回TrueFalse(或其他内容)来伪造它?

谢谢!

1 个答案:

答案 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)