Python中multiprocessing.Pool进程池实现守护进程的方法
前言
在multiprocessing.Process中可以使用p.daemon=True将子进程p设置为守护进程。
那么在multiprocessing.Pool进程池中怎么实现这个功能呢?
什么是守护进程
将子进程设置为守护进程后,若父进程退出则子进程也退出。防止产生僵尸进程。
比如下面就产生了僵尸进程。而且烦人的是,这几个僵尸进程的PID还会变,这让我怎么杀???

什么是multiprocessing.Pool进程池
下面我通过一个简单的教程来说明一下怎么使用进程池。
注意:这个模块只能在Linux中使用,具体原因可以查看http://1t.click/KzV中关于fork()的解释。
from multiprocessing import Pool #导入模块
def run_proc(name): #子进程要执行的代码
... #省略此处代码
p = Pool(4) #最多同时执行4个进程(一般为CPU核数),有进程运行完腾出的空间再分配给其他进程运行
for i in range(5):
p.apply_async(run_proc, args=(i,)) #在进程池中添加进程
p.close() #执行join()前必须执行close(),表示不能继续添加新的进程了
p.join() #等待子进程结束再往下执行
multiprocessing.Pool如何实现守护进程?
换句话说:主进程退出后(如Ctrl+C退出)怎么自动停止子进程?
我们可以通过异常处理的方式,停止进程池中的所有进程来实现
try:
p = Pool(4) #最多同时执行4个进程(一般为CPU核数),有进程运行完腾出的空间再分配给其他进程运行
for i in range(5):
p.apply_async(run_proc, args=(i,)) #在进程池中添加进程
p.close() #执行join()前必须执行close(),表示不能继续添加新的进程了
p.join() #等待子进程结束再往下执行
except:
p.terminate() #这里的意思是停止进程池中的所有进程
现在的代码就可以完美通过Ctrl+C退出啦。
Python中multiprocessing.Pool进程池实现守护进程的方法的更多相关文章
- python中multiprocessing.pool函数介绍_正在拉磨_新浪博客
python中multiprocessing.pool函数介绍_正在拉磨_新浪博客 python中multiprocessing.pool函数介绍 (2010-06-10 03:46:5 ...
- [转载]python中multiprocessing.pool函数介绍
原文地址:http://blog.sina.com.cn/s/blog_5fa432b40101kwpi.html 作者:龙峰 摘自:http://hi.baidu.com/xjtukanif/blo ...
- python中实现mysql连接池
python中实现mysql连接池 import pymysql from DBUtils.PooledDB import PooledDB MYSQL_HOST = 'localhost' USER ...
- python开发 *进程数据隔离.守护进程,进程同步工具 * 180725
进程数据隔离.守护进程,进程同步工具 一.进程之间的数据隔离: from multiprocessing import Process n=100 #主程序中变量n= def func(): glob ...
- Python 多进程 multiprocessing.Pool类详解
Python 多进程 multiprocessing.Pool类详解 https://blog.csdn.net/SeeTheWorld518/article/details/49639651
- (七) 一起学 Unix 环境高级编程(APUE) 之 进程关系 和 守护进程
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- Linux进程托管与守护进程设置
引言 在上一篇<Linux启动之旅>中,我们了解了Linux启动过程,在该过程的最后一步,init进程拉起/etc/init.d/rcN.d/目录下指定的守护进程(daemon).假若自定 ...
- 在python中创建列表的最佳和/或最快方法
在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list = [] for i in range(50): my_list.append(0 ...
- 为什么Python中称__lt__、__gt__等为“富比较”方法
Python中基类object提供了一系列可以用于实现同类对象进行"比较"的方法,可以用于同类对象的不同实例进行比较,包括__lt__.__gt__.__le__.__ge__._ ...
- 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容
一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>和<第14.11节 Python中使用BeautifulSo ...
随机推荐
- WPF 让窗口激活作为前台最上层窗口的方法
在 WPF 中,如果想要使用代码控制,让某个窗口作为当前用户的输入的逻辑焦点的窗口,也就是在当前用户活动的窗口的最上层窗口,默认使用 Activate 方法,通过这个方法在大部分设备都可以做到激活窗口 ...
- Java面试题:SimpleDateFormat是线程安全的吗?使用时应该注意什么?
在日常开发中,我们经常会用到时间,我们有很多办法在Java代码中获取时间.但是不同的方法获取到的时间的格式都不尽相同,这时候就需要一种格式化工具,把时间显示成我们需要的格式. 最常用的方法就是使用Si ...
- C#的基于.net framework的Dll模块编程(四) - 编程手把手系列文章
这次继续这个系列的介绍: 一.命名空间的起名: 对于C#来说,一般命名空间的建议是:公司名(或个人名称).产品名.分类名,比如我这边是用的这个:Lzhdim.LPF.Helper,意思是个人名Lzhd ...
- Oracle和达梦:根据外键名字查询表名
根据外键名字查询表名 select * from user_cons_columns cl where cl.constraint_name = '外键名';
- SpringBoot快速配置多数据源(整合MyBatis)
前言 由于业务需求,需要同时在SpringBoot中配置两套数据源(连接两个数据库),要求能做到service层在调用各数据库表的mapper时能够自动切换数据源,也就是mapper自动访问正确的数据 ...
- 快速搭建Zookeeper和Kafka环境
前言 由于项目需要涉及到zookeeper和Kafka的使用,快速做了一篇笔记,方便小伙伴们搭建环境. zookeeper 官方定义 What is ZooKeeper? ZooKeeper is a ...
- 在线自动加字幕!超快完成Pr的字幕制作!
在线自动加字幕!超快完成Pr的字幕制作! https://www.bilibili.com/video/BV1T441167eX/?spm_id_from=333.788.videocard.3 ht ...
- ansible(3)--ansible的相关命令行工具
目录 1 ansible命令详解 2 ansible-doc显示模块帮助信息 3 ansible-playbook 4 ansible-galaxy 5 ansible-console 1 ansib ...
- 【数字基座·智慧物联】AIRIOT新品发布会在京举办
2023年6月6日,由航天科技控股集团股份有限公司主办的"数字基座·智慧物联"AIRIOT新品发布会在北京成功举办,重磅发布了AIRIOT 4.0物联网平台的五大核心能力引擎,并邀 ...
- centos7了解
A,B,C,D四个任务有依赖关系①init:总时间T1+T2+T3+T4+T5+T6+T7②upstart:总时间T1+T2+T3,启动速度加快,但是有依赖关系的服务还是必须先后启动.③systemd ...