Python multiprocessing Pool.apply()触发RuntimeError无法运行问题
问题根源
你修改后的代码只把结果计算逻辑包进了if __name__ == '__main__'判断,但是pool = mp.Pool(mp.cpu_count())这行创建进程池的代码依然在全局作用域。Windows系统下Python的多进程默认使用spawn启动方式,子进程会导入当前主模块执行全局代码,这时候就会重复执行创建进程池的逻辑,触发启动阶段报错。
正确修改后的完整代码
import multiprocessing as mp list_a = [[1, 2, 3], [5, 6, 7, 8], [10, 11, 12], [20, 21]] list_b = [[2, 3, 4, 5], [6, 9, 10], [11, 12, 13, 14], [21, 24, 25]] def get_commons(list_1, list_2): return list(set(list_1).intersection(list_2)) if __name__ == '__main__': pool = mp.Pool(mp.cpu_count()) results = [pool.apply(get_commons, args=(l1, l2)) for l1, l2 in zip(list_a, list_b)] pool.close() pool.join() # 建议加上这行等待所有子进程执行完毕 print(results)
补充说明
- 额外添加的
pool.join()是为了等待所有子进程执行完成后再继续执行主进程后续逻辑,避免主进程提前结束导致异常。 - 执行后输出的结果为:
[[2, 3], [6], [11, 12], [21]],和预期计算公共元素的逻辑一致。
内容的提问来源于stack exchange,提问作者Karvy1
相关产品推荐
相关产品推荐

