python之多进程间通信

只愿长相守 提交于 2019-11-29 04:14:59

多进程之间,默认是不共享数据

通过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
接收完毕!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!