我正在尝试在覆盆子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解决了问题,程序按预期交付了生成器对象。
答案 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
返回需要消耗的生成器以检索结果。您的上述逻辑不会迭代它,您将打印您的生成器对象,仅此而已。