创建队列 queue
maxsize:队列可排列数量的上限 | q = Queue(maxsize) |
往队列里传值,block:阻塞状态 默认为True 为阻塞 ,timeout:超时时间 默认为None 不限时间 | q.put(block=True, timeout=None) |
从队列里取值,block:阻塞状态 默认为True 为阻塞 ,timeout:超时时间 默认为None 不限时间 | q.get(block=True, timeout=None) |
判断队列是否已满 | q.full() |
判断队列是否是空的 | q.empty() |
往队列里传值 且不等待 | q.put_nowait() |
从队列里取值 且不等待 | q.get_nowait() |
主要是为join方法使用,每次get后调用task_done相当于 获取一个删除一个,在调用join时如果列表为空则取消阻塞,只有消费者把队列所有的数据处理完毕,queue.join()才会停止阻塞 | q.task_done() |
进程间的通信:
1.定义下载函数,传参数q,队列里的进程
2.定义取值函数,传参数q,队列里的进程
3.定义进程池,
使用函数1定义子进程process类 进程1
使用函数2定义子进程process类 进程2
4.启动进程1往队列中传值
启动进程2从对列中取值
5.添加join方法阻止主进程结束
def download(q):
images = ['girl.jgp', 'boy,jpg', 'man.jpg']
for image in images:
print('正在下载...', image)
sleep(0.5)
q.put(image)
def getfile(q):
while True:
try:
file = q.get(timeout=5)
print('{}文件保存成功'.format(file))
except:
print('全部保存完毕')
break
if __name__ == '__main__':
q = Queue(5)
p1 = Process(target=download, args=(q,))
p2 = Process(target=getfile, args=(q,))
p1.start()
p1.join()
p2.start()
p2.join()