进程
1.什么是进程?
进程是正在执行中的应用程序,一个进程包含了该应用程序的所有信息,如加载数据内存空间、代码、程序数据、对象句柄,执行单元等等,计算机中多线程的操作已经可以实现多任务的操作机制了。进程开发对比线程开发优点:多进程并发编程的实现能比多线程并发机制更加有效的利用和发挥硬件资源优势
2.进程的各项操作
Multiprocessing模块可以创建管理多个进程,
通过该模块提供的 Lock|RLock 进程锁类型、Event 事件类型、Condition 条件类型等等也可以很方便的完成进程间同步操作
multiprocessing 常见属性和方法
名称 描述
Process 进程类型,用于创建和管理进程
Lock|RLock 进程互斥锁|重用锁,用于进程同步
Event 进程事件类型,用于进程同步
Condition 进程条件类型,用于进程同步
Queue 进程队列类型,用于多进程数据共享
Manager 进程管理类型,用于多进程数据共享
Listener|Client 进程监听|客户端,基于网络多进程之间的数据共享
基础操作:
import multiprocessing
if name == "main":
2.1创建一个进程
proc = multiprocessing.Process(target=hello_process)
proc.start()
print("hello, i ma main:", os.getpid(), os.getppid())
2.2:多进程面向对象实现
多进程的面向对象的实现方式类似多线程的操作模式
自定义进程类型,继承系统进程标准类型 multiprocessing.Process
重写父类的 run()方法,在方法中定义执行代码
在使用时创建该自定义进程类型的对象,调用对象的 start()方法启动一个新的进程
2.3:多进程的简化:内置进程池
创建进程池pool = multiprocessing.Pool(2)
创建了两个进程池
2.4:多个进程通信:multiprocessing.Manager
不同线程之间的数据通信,涉及到核心的数据共享问题,主要由 PYTHON 中提供的内建模块 multiprocessing.Manager 类型实现,该类型内置了大量的用于数据共享的操作
multiprocessing.Queue 常见属性和方法
名称 描述
put(data [, timeout=None]) 添加一个数据到队列中
put_nowait(data) 添加一个数据到队列中,非阻塞模式
get([timeout=None]) 从队列中获取一个数据
get_nowait() 从队列中获取一个数据,非阻塞模式
full() 判断队列是否已满
empty() 判断队列是否已空
close() 关闭队列
qsize() 获取队列中的元素数量