1. 使用multiprocessing模块创建的进程之间的通信
# -*- coding:utf-8 -*-
"""
Queue类常用属性和方法:
__init__(self, maxsize=-1)
qsize(),
full()
empty()
put(obj, block=True, timeout=None)
put_nowait(obj)
get(block=True, timeout=None)
get_nowait()
"""
import os,time
from multiprocessing import Process,Queue
def write(q):
for c in "abcdef":
time.sleep(1)
if q.full():
print("消息队列已满")
else:
q.put(c)
print("进程{}写入{}".format(os.getpid(),c))
def read(q):
while not q.empty():
time.sleep(1)
c=q.get()
print("进程{}读取{}".format(os.getpid(),c))
else:
print("消息队列为空")
def main():
q=Queue()
pread=Process(target=read,args=(q,))
pwrite=Process(target=write,args=(q,))
pwrite.start()
pwrite.join()
pread.start()
pread.join()
if __name__ == '__main__':
main()
2. 使用Pool进程池创建的进程之间的通信
# -*- coding:utf-8 -*-
"""
q=Manager().Queue()
"""
from multiprocessing import Pool,Manager
import time,os
def write(q):
for c in "abcdef":
time.sleep(1)
if q.full():
print("消息队列已满")
else:
q.put(c)
print("进程{}写入{}".format(os.getpid(),c))
def read(q):
while not q.empty():
time.sleep(1)
c=q.get()
print("进程{}读取{}".format(os.getpid(),c))
else:
print("消息队列为空")
def main():
q=Manager().Queue()
ps=Pool(2)
ps.apply(write,args=(q,))
ps.apply(read,args=(q,))
ps.close()
ps.join()
if __name__ == '__main__':
main()