[英]Python multiprocessing freeze fork-bomb
我有一个很好的简单Python脚本:
import multiprocessing
def foo():
print('running foo')
def main():
print('start')
ctx = multiprocessing.get_context('spawn')
p = ctx.Process(target=foo)
p.start()
p.join()
if __name__ == '__main__':
main()
它使用python解释器调用时的运行方式完全正常:
$ python test.py
start
running foo
另一方面,尝试冻结脚本远不那么好。
都
pyinstaller test.py
和
cxfreeze test.py
导致什么是有效的叉炸弹:
$ ./dist/test/test
start
start
start
start
.
.
.
在htop中观察,我们看到确实产生了许多进程并且机器很快就锁定了。
将start方法更改为fork
而不是spawn
不会导致fork炸弹。
ctx = multiprocessing.get_context('fork')
什么是关于冷冻过程与叉子很好地发挥,而不是产卵? 可以改变冷冻过程以允许产卵吗?
我设法用cpython repo中的Tools/freeze/freeze.py
脚本重现问题,所以问题确实比cx_freeze或pyinstaller更深。
在进行了一些挖掘后,我发现我不是唯一一个遇到问题的人 - 在我遇到问题之前一个月左右开了以下问题:
https://bugs.python.org/issue32146
他们对修复有一些想法,希望它能成为3.7.x版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.