Python使用进程Process模块管理资源


Posted in Python onMarch 05, 2020

进程Process是对各种资源管理的集合,包含对各种资源的调用、内存的管理、网络接口的调用;一个进程Process可以包含多个子进程,启动一个进程的时候会自动创建一个线程,进程里的第一个线程就是主线程(即python __name__ == ‘__main__');

进程Process模块

对于线程操作可以用threading模块,那么对于进程的创建python同样也提供了Process模块,创建进程时需要导入该模块,语法如下:

# 导入进程模块
from multiprocessing import Process
# 创建进程
p = Process(group=None, target=None, name=None, args=(), kwargs={})

参数介绍:

group — 参数未使用,默认值为None;

target — 表示调用对象,即子进程要执行的任务(函数名字);

args — 子进程对应函数的参数,并且类型是元组tuple;

kwargs — 子进程对应函数的参数,并且类型是字典dict,如kwargs = {‘name':Jack, ‘age':18};

name — 子进程名称;

返回值:返回进程实例对象;

三.进程Process函数介绍

其实进程Process的函数和线程threading类似,具体如下:

1.start() — 启动进程;

2.terminate() — 强制终止进程,不会进行任何清理操作。如果该进程终止前,创建了子进程,那么该子进程在其强制结束后变为僵尸进程;如果该进程还保存了一个锁那么也将不会被释放,进而导致死锁,使用时,要注意;

3.is_alive() — 判断某进程是否存活,存活返回True,否则False;

4.join([timeout]) — 主线程等待子线程终止。timeout为可选择超时时间;需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程 ;

5.daemon — 默认值为False,如果设置为True,代表该进程为后台守护进程;当该进程的父进程终止时,该进程也随之终止;并且设置为True后,该进程不能创建子进程,设置该属性必须在start()之前;

6.name — 进程名称;

7.pid— 进程ID标识,pid,值得注意的是:如果在start函数之前获取pid默认为None,因为进程还未创建,获取不到pid;

8.exitcode — 进程运行时为None,如果为-N,表示被信号N结束了;

9.authkey — 进程身份验证,默认是由os.urandom()随机生成32字符的字符串。这个键的用途是设计涉及网络连接的底层进程间的通信提供安全性,这类连接只有在具有相同身份验证才能成功;

进程Process使用

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com
 
@File:python_process.py
@Time:2019/12/21 21:25
 
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
 
from multiprocessing import Process
 
 
def people_info(*args,**kwargs):
  print(args,kwargs)
 
 
 
def main():
 
  # 信息列表
  list_info = [{"name":"zhangsan","height":"175cm"},
         {"name": "lisi", "height": "155cm"},
         {"name": "wangwu", "height": "195cm"},
         {"name": "liqi", "height": "166cm"},
         {"name": "wangba", "height": "125cm"},]
 
  # 创建进程
  for i in range(5):
    p = Process(target=people_info,args=(i,),kwargs=list_info[i])
    # 设置为守护进程,必须设置在start函数之前,否则会产生异常
    # 默认为False,即主进程会等待子进程结束之后才结束,
    # 如果设置为True,主进程结束之后所有的子进程自动结束,不管子进程是否已经执行完所有任务
    # p.daemon = True
 
    # 启动进程
    p.start()
 
    # 获取进程pid,如果在start函数之前获取pid,默认为None,因为进程还没启动
    print("进程process pid = ",p.pid)
    # 获取进程名字
    print("进程process name = ",p.name)
    # 获取进程pid
    print("进程process exitcode = ",p.exitcode)
if __name__ == "__main__":
  main()

输出结果:

进程process pid = 2600
进程process name = Process-1
进程process exitcode = None
进程process pid = 4372
进程process name = Process-2
进程process exitcode = None
进程process pid = 14124
进程process name = Process-3
进程process exitcode = None
进程process pid = 10920
进程process name = Process-4
进程process exitcode = None
进程process pid = 4892
进程process name = Process-5
进程process exitcode = None
(0,) {'name': 'zhangsan', 'height': '175cm'}
(1,) {'name': 'lisi', 'height': '155cm'}
(2,) {'name': 'wangwu', 'height': '195cm'}
(3,) {'name': 'liqi', 'height': '166cm'}
(4,) {'name': 'wangba', 'height': '125cm'}

小窍门:

Python 的 os 模块封装了常见的系统调用,其中就包括:

os.fork() 创建子进程
os.getpid() 获取自身 ID
os.getppid() 获取父进程 ID

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python版微信红包分配算法
May 04 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
python设置环境变量的作用和实例
Jul 09 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
Python循环实现n的全排列功能
Sep 16 Python
Python英文文章词频统计(14份剑桥真题词频统计)
Oct 13 Python
win10系统下python3安装及pip换源和使用教程
Jan 06 Python
Python包和模块的分发详细介绍
Jun 19 Python
Python基于locals返回作用域字典
Oct 17 Python
python 使用pandas读取csv文件的方法
Dec 24 Python
Python json模块与jsonpath模块区别详解
Mar 05 #Python
Python如何用filter函数筛选数据
Mar 05 #Python
Python API len函数操作过程解析
Mar 05 #Python
Python通过Tesseract库实现文字识别
Mar 05 #Python
Python爬虫实现模拟点击动态页面
Mar 05 #Python
python实现图片横向和纵向拼接
Mar 05 #Python
基于Python生成个性二维码过程详解
Mar 05 #Python
You might like
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
PHP _construct()函数讲解
2019/02/03 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
python对数组进行反转的方法
2015/05/20 Python
Python读写ini文件的方法
2015/05/28 Python
Django中的Signal代码详解
2018/02/05 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
python输出带颜色字体实例方法
2019/09/01 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
python dict如何定义
2020/09/02 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
汽车服务工程专业自荐信
2014/09/02 职场文书
员工工作自我评价
2014/09/26 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
关于 Python json中load和loads区别
2021/11/07 Python