- 全局变量:不能共享
import multiprocessing # 全局变量多个进程之间不能共享 num = 250 def run(): global num print('子进程开始') num += 10 print('子进程操作') print('子进程结束') if __name__ == '__main__': print('主进程开始') p = multiprocessing.Process(target=run) p.start() p.join() print('主进程结束', num)
- 管道
pipe
import multiprocessing def run(p_a): recv = p_a.recv() print('子进程接收到数据:', recv) p_a.send('world') if __name__ == '__main__': # 创建管道 # 全双工:两个都可以进行收发数据,默认就是 p_a, p_b = multiprocessing.Pipe() # 半双工:p_a只能接收数据,p_b只能发送数据 # p_a, p_b = multiprocessing.Pipe(duplex=False) p = multiprocessing.Process(target=run, args=(p_a,)) p.start() p_b.send('hello') p.join() print('主进程结束', p_b.recv())
- 队列
queue
- 基本使用
import multiprocessing if __name__ == '__main__': # 创建一个队列:数据先进先出 q = multiprocessing.Queue(3) # 判断队列是否为空 print(q.empty()) # 判断队列是否已满 print(q.full()) # 向列队中插入数据 q.put('how') q.put('are') q.put('you') # 若队列已满,在放数据则会阻塞 # q.put('hello') # 若队列已满,使用下面的函数则会报错 # q.put_nowait('hello') # print(q.full()) # 从队列中获取数据 print(q.get()) print(q.get()) print(q.get()) # 若数据已满,再次获取则会阻塞 # print(q.get()) # 若队列为空,获取数据会报错 # print(q.get_nowait()) # 获取队列的长度(队列中此时有多少个数据) print(q.qsize()) # 关闭队列 q.close()
- 进程间传输数据
import multiprocessing import os import time # 写数据 def write_data(q): for i in range(5): data = 'PID:{} time:{}'.format(os.getpid(), time.time()) print('写入数据:', data) q.put(data) time.sleep(0.5) # 读数据 def read_data(q): for i in range(5): data = q.get() print('读取数据:', data) time.sleep(1) if __name__ == '__main__': # 创建队列 q = multiprocessing.Queue(3) # 创建写数据进程 p_w = multiprocessing.Process(target=write_data, args=(q,)) # 创建读数据进行 p_r = multiprocessing.Process(target=read_data, args=(q,)) # 启动进程 p_w.start() p_r.start() # 等待进程结束 p_w.join() p_r.join() print('主进程结束')
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~