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

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.lryc.cn/news/2404636.html

相关文章:

  • Paraformer分角色语音识别-中文-通用 FunASR demo测试与训练
  • 【从0-1的CSS】第1篇:CSS简介,选择器以及常用样式
  • 对抗反爬机制的分布式爬虫自适应策略:基于强化学习的攻防博弈建模
  • JDK21深度解密 Day 15:JDK21实战最佳实践总结
  • 手写muduo网络库(一):项目构建和时间戳、日志库
  • 每日算法刷题Day25 6.7:leetcode二分答案3道题,用时1h40min(遇到两道动态规划和贪心时间较长)
  • 14-Oracle 23ai Vector Search 向量索引和混合索引-实操
  • kubeadm安装k8s
  • 服务器新建用户无法使用conda
  • Web前端基础:JavaScript
  • 基于对比学习的带钢表面缺陷分类研究,整合SimCLR自监督预训练与YOLOv8目标检测框架的技术解析及Python实现方案
  • 基于AWS Serverless架构:零运维构建自动化SEO内容生成系统
  • 【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
  • Linux操作系统故障应急场景及对应排查方法
  • 电镀机的阳极是什么材质?
  • vscode调试deepspeed的方法之一(无需调整脚本)
  • 神经网络-Day44
  • 创客匠人:如何通过精准定位实现创始人IP打造与知识变现
  • Codeforces Round 509 (Div. 2) C. Coffee Break
  • 榕壹云健身预约系统:多门店管理的数字化解决方案(ThinkPHP+MySQL+UniApp实现)
  • QUIC——UDP实现可靠性传输
  • 提高Python编程效率的工具推荐
  • React Native图片预加载:让你的应用图片预览像德芙一样丝滑
  • 快速上手shell脚本运行流程控制
  • 10.Linux进程信号
  • Python 函数全攻略:函数基础
  • 机器学习基础(四) 决策树
  • DDPM优化目标公式推导
  • CentOS 7如何编译安装升级gcc至7.5版本?
  • 为什么React列表项需要key?(React key)(稳定的唯一标识key有助于React虚拟DOM优化重绘大型列表)