当前位置: 首页 > 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.xdnf.cn/news/918361.html

相关文章:

  • Playwright自动化测试全栈指南:从基础到企业级实践(2025终极版)
  • 柯尼卡美能达Konica Minolta bizhub 205i打印机信息
  • 线程池封装
  • ubuntu 22.04虚拟机配置静态IP
  • springBoot 通过模板导出Excel文档的实现
  • 几种简单的排序算法(C语言)
  • clickhouse 和 influxdb 选型
  • 【Android】浅析View.post()
  • rec_pphgnetv2完整代码学习(二)
  • 机器学习监督学习实战五:六种算法对声呐回波信号进行分类
  • [yolov11改进系列]基于yolov11引入轻量级下采样ContextGuided的python源码+训练源码
  • VBA之Word应用第三章第十节:文档Document对象的方法(三)
  • LeetCode--24.两两交换链表中的结点
  • Android USB 通信开发
  • 数组名作为函数参数详解 —— 指针退化及遍历应用示例
  • Oracle中的异常处理与自定义异常
  • Redis 与 MySQL 数据一致性保障方案
  • Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然
  • chili3d 笔记17 c++ 编译hlr 带隐藏线工程图
  • Jenkins持续集成CI,持续部署CD,Allure报告集成以及发送电子 邮件
  • STM32标准库-输入捕获
  • PySide6 GUI 学习笔记——常用类及控件使用方法(多行文本控件QTextEdit)
  • Redis高可用架构
  • CCPC chongqing 2025 H
  • PySide6 GUI 学习笔记——常用类及控件使用方法(单行文本控件QLineEdit)
  • Linux进程(中)
  • Java高级 |【实验八】springboot 使用Websocket
  • 174页PPT家居制造业集团战略规划和运营管控规划方案
  • 【android bluetooth 协议分析 15】【SPP详解 1】【SPP 介绍】
  • ThinkPHP 5.1 中的 error 和 success 方法详解