multiprocessing模块提供了Process类代表进程对象
Process类参数
- target: 执行的目标任务名称,即子进程要执行的任务
- args:以元组的形式传参
- kwargs:以字典的形式传参
方法
start() 开启子进程
is_alive() 判断子进程是否还存活
join() 主进程等待子进程执行结束
常用属性
name:当前进程的别名 默认Process-N
pid:当前进程的进程编号
逻辑和线程类似
from multiprocessing import Process
def sing():
print("唱歌")
def dance():
print("跳舞")
if __name__ == '__main__':
p1 = Process(target=sing)
p2 = Process(target=dance)
p1.start()
p2.start()
PS:进程之间不共享全局变量
进程间的通信
Queue(队列)
q.put():放入队列
q.get():取出最先进去的第一条数据 并从队列中移除 先进先出
q.empty():判断队列是否为空
q.qsize():返回当前队列包含的消息数量
q.full():判断队列是否满了
from queue import Queue
q = Queue(3) #最多可以接受3条 不写或负数则没上限
q.put("张三")
q.put("李四")
q.put("王五")
print(q.full())
print(q.get()) # 获取队列的一条消息,然后将其从队列中移除
print(q.full())
---------------------------
True
张三
False
进程间通信:
from multiprocessing import Process, Queue
import time
def wdata(q):
for i in range(5):
print("写入的数据是:", i)
q.put(i)
time.sleep(1)
def rdata(q):
while True:
if q.empty():
break
print("读取的数据是:", q.get())
if __name__ == '__main__':
q = Queue()
p1 = Process(target=wdata, args=(q,))
p2 = Process(target=rdata, args=(q,))
p1.start()
p1.join() # 阻塞进程
p2.start()
-------------------------------
写入的数据是: 0
写入的数据是: 1
写入的数据是: 2
写入的数据是: 3
写入的数据是: 4
读取的数据是: 0
读取的数据是: 1
读取的数据是: 2
读取的数据是: 3
读取的数据是: 4