前言
记录一下学习进度.
1.进程之间的通信
我们都知道两个进程之间的内存是相互独立的,A进程不能访问B进程的数据,包括主进程和子进程,主进程也是不能访问子进程的数据的.要想实现数据之间的交流传递,有很多方式,这里先介绍其中的一种:Queue.
2.进程Queue
这里的Queue和之前提到的queue不是同一个,之间提到的queue是线程中的queue,而现在提到的Queue是进程中的Queue,它们的用法类似,但是功能不一样
(1) 线程之间的数据交互
import queue
import threading
def func():
q.put([42,'fan','ok'])
if __name__ == '__main__':
q = queue.Queue()
p = threading.Thread(target=func)
p.start()
print(q.get())
执行结果:
[42, 'fan', 'ok']
同一个进程内的线程共享同一片内存区域,这些线程之间可以实现数据的传递,修改能.在这个例子中,实现了子线程访问主线程数据.
(2)进程之间的通信
from multiprocessing import Process,Queue
def func(q):
q.put([42,'fan','ok'])
if __name__ == '__main__':
q = Queue()
p = Process(target=func,args=(q,))
p.start()
print(q.get())
执行结果:
[42, 'fan', 'ok']
注:进程Queue的使用方法和线程的Queue的使用方法相同,但是进程中的Queue只是实现了数据的传递,并没有实现数据的修改.
3.实现一个简单的读写操作
from multiprocessing import Process,Queue
import os
def wp(q):
print('{} 进程开始写入:'.format(os.getpid())) # 获取当前进程id
for i in range(10):
print('将{}写入队列'.format(i))
q.put(i)
def rq(q):
print('{}进程开始读取:'.format(os.getpid()))
while True:
if q.empty():
break
else:
print('读取数据为:',q.get())
if __name__ == '__main__':
q = Queue() # 创建一个Queue实例
w = Process(target=wp,args=(q,))
w.start()
w.join()
r = Process(target=rq,args=(q,))
r.start()
执行结果
31719 进程开始写入:
将0写入队列
将1写入队列
将2写入队列
将3写入队列
将4写入队列
将5写入队列
将6写入队列
将7写入队列
将8写入队列
将9写入队列
31721进程开始读取:
读取数据为: 0
读取数据为: 1
读取数据为: 2
读取数据为: 3
读取数据为: 4
读取数据为: 5
读取数据为: 6
读取数据为: 7
读取数据为: 8
读取数据为: 9
写在最后
本文是个人的一些学习笔记,如有侵权,请及时联系我进行删除,谢谢大家.