您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python多处理和子进程的独立性

Python多处理和子进程的独立性

这与您如何调用python无关;这是multiprocessing模块的功能。当您导入该模块时,会在父进程中添加一个退出处理程序,以在允许父进程退出之前调用通过创建的所有子进程join()Process对象multiprocessing.Process。如果您要以这种方式启动子进程,则没有办法,不对模块内部进行黑客操作,可以避免给您带来麻烦的行为。

如果您想启动一个进程,该进程的寿命可以超过父进程,那么使用可能会更好subprocess.Popen。如果孩子是这样开始的,那么父母将不会在退出之前尝试加入孩子,而是立即退出,留下一个孤儿:

>>> from subprocess import Popen
>>> Popen(["sleep", "100"])
<subprocess.Popen object at 0x10d3fedd0>
>>> exit()
alp:~ $ ps -opid,ppid,command | grep sleep | grep -v grep
37979     1 sleep 100

您使用multiprocessing而不是有特定原因subprocess吗?前者并非旨在用于创建旨在使父进程寿命更长的子进程。这是为了创建子进程来完成可以跨cpu有效并行化的工作,以此来规避Global Interpreter Lock。(因此multiprocessing,在此讨论中,我忽略的分布式功能。)multiprocessing因此通常在以下情况下使用:如果没有GIL,则将使用线程。(请注意,就此而言,multiprocessing模块的API是紧随模块的API之后建模的threading。)

对于您帖子末尾的具体问题:(1)当父级被终止时,关于python的一切都不负责杀死孩子。仅当父服务器在退出之前将其杀死(或者整个进程组都被杀死)时,该Web服务器的子服务器才会被杀死。(2)链接到的方法看起来像是在不知道标准惯用法的情况下尝试复制守护程序。这里有许多用于创建守护进程的软件包。您应该改用其中之一。

python 2022/1/1 18:27:15 有466人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶