当前位置: 首页 > 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()
  • 运行

在这里插入图片描述

http://www.lqws.cn/news/206569.html

相关文章:

  • 腾讯 ovCompose 跨平台框架发布,几年后还会有人用吗?
  • 计算机基础知识(第五篇)
  • 《光子技术成像技术》第二章 预习2025.6.7
  • WPF八大法则:告别模态窗口卡顿
  • 408第一季 - 数据结构 - 树与二叉树
  • .Net Framework 4/C# 泛型的使用、迭代器和分部类
  • stm32—ADC和DAC
  • iview中的table组件点击一行中的任意一点选中本行
  • PCA笔记
  • phosphobot开源程序是控制您的 SO-100 和 SO-101 机器人并训练 VLA AI 机器人开源模型
  • ​线路板快速打样服务中的交期管理策略:猎板PCB的极速交付实践​​
  • Redis:Hash数据类型
  • Redis线程安全深度解析:单线程模型的并发智慧
  • 黑马点评【基于redis实现共享session登录】
  • GPU集群故障分析:大型AI训练中的硬件问题与影响
  • Redis高可用架构
  • 【Go核心编程】第十三章:接口与多态——灵活性的艺术
  • 安卓基础(Java 和 Gradle 版本)
  • Android USB 通信开发
  • LeetCode 118 杨辉三角 (Java)
  • Python项目中添加环境配置文件
  • python如何统计图片的颜色分布
  • Spark 之 AQE
  • CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found
  • [Go]context上下文--使用要点--源码分析--Go核心--并发编程
  • Ubuntu挂载本地镜像源(像CentOS 一样挂载本地镜像源)
  • SAP学习笔记 - 开发27 - 前端Fiori开发 Routing and Navigation(路由和导航)
  • 基于Python学习《Head First设计模式》第六章 命令模式
  • Redis :String类型
  • 1Panel运行的.net程序无法读取系统字体(因为使用了docker)