gpt4 book ai didi

Python多处理卡住叉炸弹

转载 作者:行者123 更新时间:2023-11-28 19:04:48 25 4
gpt4 key购买 nike

我有一个非常简单的 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

导致什么是有效的 fork 炸弹:

$ ./dist/test/test
start
start
start
start
.
.
.

在 htop 中观察,我们看到确实产生了很多进程并且机器很快就锁定了。

将启动方法更改为 fork 而不是 spawn 不会导致 fork 炸弹。

ctx = multiprocessing.get_context('fork')

与 fork 配合使用而不是 spawn 的卡住过程是什么?是否可以更改卡住过程以允许产卵?

最佳答案

我设法重现了 Tools/freeze/freeze.py script in the cpython repo 的问题,所以问题确实比cx_freeze或pyinstaller更深。

经过更多挖掘后,我发现我不是唯一遇到问题的人 - 在我遇到问题前大约一个月打开了以下问题:

https://bugs.python.org/issue32146

他们有一些修复的想法,希望能将其纳入 3.7.x 版本。

关于Python多处理卡住叉炸弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48265137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com