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

Python多处理和子进程的独立性,第1张

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 grep37979     1 sleep 100

您使用

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

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存