python并发ProcessPoolExecutor不能在Raspberry Pi上工作(idle python 3.4.2)

时间:2016-11-27 21:09:46

标签: python concurrency multiprocessing

我正在尝试在覆盆子pi 3(4核心)上运行的股价机器学习应用程序中使用多处理。以下是一些说明问题的代码:

from concurrent import futures

def some_function(x):
    return x + 1

def main_function(some_list):
    with futures.ProcessPoolExecutor() as executor:
        results = executor.map(some_function, some_list)
    return results

if __name__ == '__main__':
    print(main_function([1, 2, 3]))

当我运行它时,我立即收到一条消息,说明该进程仍在运行,并询问我是否要将其杀死。无论我是否按“确定”,程序都不会产生任何结果或错误。

将ProcessPoolExecutor更改为ThreadPoolExecutor解决了问题,程序按预期交付了生成器对象。

1 个答案:

答案 0 :(得分:0)

您需要通过以下方式修复逻辑:

from concurrent import futures

def some_function(x):
    return x + 1

def main_function(some_list):
    with futures.ProcessPoolExecutor() as executor:
        results = executor.map(some_function, some_list)

    return list(results)

if __name__ == '__main__':
    print(main_function([1, 2, 3]))

ProcessPoolExecutor.map返回需要消耗的生成器以检索结果。您的上述逻辑不会迭代它,您将打印您的生成器对象,仅此而已。