当前位置: 首页 > news >正文

Python-进程

进程

简介

操作系统分配资源的基本单位

创建

依赖

  • 依赖模块 multiprocessing 中的 Process

语法

Process(group[,target[,name[,args[,kwargs]]]])

  • target:如果传递了函数的引用,这个子进程就执行这里的代码
  • args:元组的方式传递,顺序保持一致,一个时得有逗号
  • kwargs:对象的方式传递参数,key 需要和参数名称保持一致
  • name:设定一个名字,可以不设定
  • group:指定进程组

方法

  • start():启动子进程实例(创建子进程)
  • is_alive():判断子进程是否存活
  • join([timeout]):是否等待子进程执行结束,或等待多少秒
  • terminate():不管任务是否完成,立即终止子进程

属性

  • name:当前进程的别名,默认process-N,N为从1开始递增的整数
  • pid:当前进程的pid(进程号)

状态

  • 就绪态:运行的条件都具备,正在等待cpu执行
  • 执行态:cpu正在执行其功能
  • 等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待状态

案例

创建进程
  • 代码
from multiprocessing import Process
import timedef sing(name, age):time.sleep(2)print('唱歌者姓名:' + name + ',年龄:' + str(age))print('正在唱歌...')def dance(name, age):print('跳舞者姓名:' + name + ',年龄:' + str(age))print('正在跳舞...')if __name__ == '__main__':# 构建两个进程p1 = Process(target=sing, args=('张学友', 30))p2 = Process(target=dance, kwargs={'name': '谢霆锋', 'age': 25})# 启动两个进程p1.start()p2.start()
  • 运行

在这里插入图片描述

发现问题
  • 先 start 的唱歌进程, 可结果输出确先是跳舞
  • 想想应该和线程类似,默认异步执行
解决问题

join(timeout) : 等待子进程执行完毕

  • 代码
from multiprocessing import Process
import timedef sing(name, age):time.sleep(2)print('唱歌者姓名:' + name + ',年龄:' + str(age))print('正在唱歌...')def dance(name, age):print('跳舞者姓名:' + name + ',年龄:' + str(age))print('正在跳舞...')if __name__ == '__main__':# 构建两个进程p1 = Process(target=sing, args=('张学友', 30))p2 = Process(target=dance, kwargs={'name': '谢霆锋', 'age': 25})# 启动两个进程p1.start()p1.join()p2.start()p2.join()print('主进程结束')
  • 运行

在这里插入图片描述

自定义名称
  • 代码
from multiprocessing import Process
import timedef sing(name, age):time.sleep(2)print('唱歌者姓名:' + name + ',年龄:' + str(age))print('正在唱歌...')def dance(name, age):print('跳舞者姓名:' + name + ',年龄:' + str(age))print('正在跳舞...')if __name__ == '__main__':# 构建两个进程p1 = Process(name='P-sing', target=sing, args=('张学友', 30))p2 = Process(name='P-dance', target=dance, kwargs={'name': '谢霆锋', 'age': 25})# 启动两个进程p1.start()print("进程名称:" + p1.name + " ,是否存活:" + str(p1.is_alive()))p1.join()print("进程名称:" + p1.name + " ,是否存活:" + str(p1.is_alive()))p2.start()print("进程名称:" + p2.name + " ,是否存活:" + str(p2.is_alive()))p2.join()print("进程名称:" + p2.name + " ,是否存活:" + str(p2.is_alive()))print('主进程结束')
  • 运行

在这里插入图片描述

资源不共享

案例:

  1. 读写两个进程
  2. 写进程往全局变量数组中添加元素
  3. 等写进程执行完毕后,再开启读进程
  • 代码
from multiprocessing import Process
import timedef write():for i in range(5):li.append(i)time.sleep(1)print('写入的数据:', li)def read():print('读取的数据:', li)li = []if __name__ == '__main__':# 构建两个进程w = Process(name='P-W', target=write)r = Process(name='P-R', target=read)# 启动两个进程w.start()w.join() # 等待写入完成后再去读取r.start()
  • 运行

在这里插入图片描述

相关文章:

  • 打卡day47
  • day 27 装饰器函数
  • Java异步编程难题拆解与技术实践
  • C++组合
  • 电子电气架构 ---智能汽车电子电气架构
  • 【JavaSE】集合学习笔记
  • python训练营打卡第47天
  • 基于Java Swing的固定资产管理系统设计与实现:附完整源码与论文
  • Java+Access综合测评系统源码分享:含论文、开题报告、任务书全套资料
  • STM32学习笔记:外部中断(EXTI)原理与应用详解
  • 外部排序全解析:从基础到优化策略(王道)
  • [yolov11改进系列]基于yolov11融合改进检测头特征融合模块AFPN的python源码+训练源码
  • 【Linux】LInux下第一个程序:进度条
  • Unity基础-欧拉角和四元数
  • 当数据包从上层移动到下层时,OSI 模型中会发生什么?
  • Qt/C++学习系列之Excel使用记录
  • xctf-weak_auth(弱口令)
  • 初探Succinct Jagged稀疏多项式承诺方案
  • Go语言堆内存管理
  • Scade 语言概念 - 方程(equation)
  • 美艺网站建设/旺道seo系统
  • 单人给一个公司做网站费用/搜索引擎平台排名
  • 汉阴做网站/国外域名注册网站
  • 泰安公司做网站/电商培训班一般多少钱一个月
  • 福建建设执业资格网站报名系统/seo建站是什么意思
  • 用织梦系统做的2个网站要把它都上传到服务器上吗/seo自动点击排名