Python多处理管理器以及os.fork操作系统产生奇怪的行为

2024-03-29 05:12:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我的同事请求我帮助解决他正在处理的守护程序脚本的问题。他犯了一个奇怪的错误多处理管理器,我成功地用以下五行代码重现:

import multiprocessing, os, sys
mgr = multiprocessing.Manager()
pid = os.fork()
if pid > 0:
    sys.exit(0)

在CentOS 6 Linux和Python2.6上运行时,出现以下错误:

^{pr2}$

我怀疑这个错误是由于os.fork操作系统以及多处理管理器,他应该使用多处理模块来创建新进程,而不是os.fork操作系统. 有人能证实这一点和/或解释发生了什么吗?如果我的直觉是正确的,为什么这是错误的地方使用叉子手术室?在


Tags: 代码import程序脚本管理器os错误sys
1条回答
网友
1楼 · 发布于 2024-03-29 05:12:25

问题是Manager创建一个进程并尝试在sys.exit停止它。由于进程的内存在fork期间被复制(延迟),父进程和子进程都试图停止进程并等待它停止。但是,正如例外所提到的,只有父进程可以做到这一点。如果不是使用os.fork,而是使用multiprocessing.Process,这将产生一个新进程,该进程不会试图关闭sys.exit处的Manager。在

相关问题 更多 >