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中操作列表之List.pop()方法的使用
May 21 Python
Python函数式编程指南(三):迭代器详解
Jun 24 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
Python基础教程之利用期物处理并发
Mar 29 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
Pytorch中.new()的作用详解
Feb 18 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
使用python将微信image下.dat文件解密为.png的方法
Nov 30 Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 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
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
javascript 写类方式之五
2009/07/05 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
javascript中Function类型详解
2015/04/28 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
python 判断自定义对象类型
2009/03/21 Python
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
Python守护线程用法实例
2017/06/23 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
Servlet的生命周期
2013/08/25 面试题
政协调研汇报材料
2014/08/15 职场文书
消防志愿者活动方案
2014/08/23 职场文书
工作简报格式范文
2015/07/21 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
Redis Lua脚本实现ip限流示例
2022/07/15 Redis