我想用Python的multiprocessing.Pool进行进程并行运行。
放在__name__=="__main__"里面,可以正常运行。
但作为模块导入就会报错。
在网上查了一下,必须放在main函数里面执行。
请教一下,有什么办法不放在main函数中,作为模块或者其他函数导入运行?
我想用Python的multiprocessing.Pool进行进程并行运行。
放在__name__=="__main__"里面,可以正常运行。
但作为模块导入就会报错。
在网上查了一下,必须放在main函数里面执行。
请教一下,有什么办法不放在main函数中,作为模块或者其他函数导入运行?
4 回答4.5k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
4 回答3.9k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.6k 阅读✓ 已解决
2 回答511 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
官网有描述:
同样在协程
asyncio
中有个run_in_executor
api,第一个入参是executor
,这里我们可以指定None
或者ThreadPoolExecutor
或者ProcessPoolExecutor
三个参数之一;其中也提到,当传参数为ProcessPoolExecutor
时候,协程的运行就必须要在if __name__ == "__main__"
下,原因就是因为ProcessPoolExecutor
背后也是使用了multiprocessing
库。stackoverflow有个答案,你可以具体看一下,https://stackoverflow.com/que...
具体说的是针对
Linux
和Windows
以及Mac
系统的进程创建方式的不同「fork和spawn」对多进程使用方式的影响。multiprocessing
对三种操作系统的进程参考python官网文档:https://docs.python.org/3/lib...
如果是linux系统的话好像就没这个问题 「你可以试试」,这里仅提供一些参考资料方便理解。
-------- 补充 ---------
使用
spawn
方式部分源码:所以使用
spawn
的方式的时候,会去检查这么一个是否使用main的判断,因此你必须使用__main__
。