
进程与进程之间共享数据用queue
from multiprocessing import Process, Queue
# 队列(FIFO)先进先出,第一个存储的数据,会被第一个取出
# 栈(LIFO) 后进先出,最后一个存储的数据,会被第一个取出
# 在python中,为我们提供了一个队列对象,通过该对象可以在进程间来共享数据
# Queue 用来创建一个队列的实例
# 创建对列时,可以在类中指定一个队列的大小
q = Queue(1)
# put() 用来向队列中存储数据
q.put('hello')
# q.put(123) 如果队列已满,调用put,会一直等待
# q.put_nowait(456) queue.Full
print(q)
# get() 用于获取队列中的第一个数据
r = q.get()
r = q.get(timeout=3)
# get() 获取数据时,如果队列没有数据,不会报错,而是一直等待
# 它会阻塞程序的执行,直到有数据可以取出
# r = q.get()
# r = q.get_nowait() 该方法获取数据,如果有就获取,没有就报错queue.Empty 使用有风险,一般不使用
print(r)

from multiprocessing import Process, Queue
import time
# 定义一个负责存储数据的函数
def mk_data(q):
for i in range(100):
q.put(f'mk_data创建的数据{i}')
time.sleep(0.5)
# 定义一个函数负责读取数据
def get_data(q, num):
while 1:
print(f'{num}读取数据', q.get())
if __name__ == '__main__':
q = Queue(3)
mk = Process(target=mk_data, args=(q,))
gt = Process(target=get_data, args=(q,1))
gt2 = Process(target=get_data, args=(q, 2))
gt3 = Process(target=get_data, args=(q, 3))
mk.start()
gt.start()
gt2.start()
gt3.start()
mk.join()
gt.join()
gt2.join()
gt3.join()
