栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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)链接到的方法看起来像是在不知道标准惯用法的情况下尝试复制守护程序。这里有许多用于创建守护进程的软件包。您应该改用其中之一。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653266.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号