多进程之间,默认是不共享数据
通过Queue(队列Q)可以实现进程间的数据传递
Q本身是一个消息队列
from multiprocessing import Queue
q = Queue(3)
q.put('消息01')
q.put('消息02')
q.put('消息03')
print(q.full())
》》》
Ture
可以使⽤multiprocessing模块的Queue实现多进程之间的数据传递
初始化Queue()对象时(例如: q=Queue()) , 若括号中没有指定最⼤可接收的消息数量, 或数量为负值, 那么就代表可接受的消息数量没有上限
Queue.qsize(): 返回当前队列包含的消息数量
Queue.empty(): 如果队列为空, 返回True, 反之False
Queue.full(): 如果队列满了, 返回True,反之False
Queue.get([block[, timeout]]): 获取队列中的⼀条消息, 然后将其从列队中移除, block默认值为True
—如果block使⽤默认值, 且没有设置timeout(单位秒) , 消息列队如果为空, 此时程序将被阻塞(停在读取状态) , 直到从消息列队读到消息为⽌,如果设置了timeout, 则会等待timeout秒, 若还没读取到任何消息, 则抛出"Queue.Empty"异常 ;
—如果block值为False, 消息列队如果为空, 则会⽴刻抛出“Queue.Empty”异常;
Queue.get_nowait(): 相当Queue.get(False)
Queue.put(item,[block[, timeout]]): 将item消息写⼊队列, block默认值为True
—如果block使⽤默认值, 且没有设置timeout(单位秒) , 消息列队如果已经没有空间可写⼊, 此时程序将被阻塞(停在写⼊状态) , 直到从消息列队腾出空间为⽌, 如果设置了True和timeout, 则会等待timeout秒, 若还没空间, 则抛出"Queue.Full"异常;
—如果block值为False, 消息列队如果没有空间可写⼊, 则会⽴刻抛出"Queue.Full"异常;
Queue.put_nowait(item): 相当Queue.put(item, False);
from multiprocessing import Queue, Process
import time
def run01(q):
for value in ['a', 'b', 'c']:
print('写入:', value)
q.put(value)
time.sleep(1)
def run02(q):
while True:
if not q.empty():
print('读到的是:', q.get())
time.sleep(1)
else:
break
if __name__ == '__main__':
q = Queue()
p01 = Process(target=run01, args=(q,))
p02 = Process(target=run02, args=(q,))
p01.start()
p01.join() #等待接收完毕
p02.start()
p02.join()
print('接收完毕!')
》》》
写入: a
写入: b
写入: c
读到的是: a
读到的是: b
读到的是: c
接收完毕!
来源:CSDN
作者:Python'sGod
链接:https://blog.csdn.net/weixin_44733660/article/details/103244361