Python中Queue队列进程通信

第一次写,刚学,折磨了我一下午。

import time

from multiprocessing import Pool, Manager, Queue

# 获取数据
def reader(queueRead, char, lock):
	# 加锁
	lock.acquire()
	if not queueRead.full():
		print("--Reader--" + char)
		queueRead.put(char)
		time.sleep(1)
	# 释放
	lock.release()

# 整理数据
def changer(queueRead, queueChange, lock):
	lock.acquire()
	if not queueRead.empty():
		tempChar = queueRead.get()
		tempChar = tempChar.lower()
		print("--Changer--" + tempChar)
		if not queueChange.full():
			queueChange.put(tempChar)
		time.sleep(1)
	lock.release()

# 展示数据
def shower(queueChange):
	if not queueChange.empty():
		tempChar = queueChange.get()
		print("--Shower--" + tempChar)
		time.sleep(1)
	
def main():
	charArray = "ABCDEFG"
	manager = Manager()
	# 读取数据队列
	queueRead = manager.Queue(3)
	# 整理数据队列
	queueChange = manager.Queue(4)
	# 多个进程控制一个队列,需要加锁,防堵塞
	lock = manager.Lock()
	# 创建 3 个子进程
	processPool = Pool(3)
	
	for char in charArray:
		# 给各子进程指派任务
		processPool.apply_async(reader, args=(queueRead, char, lock, ))
		processPool.apply_async(changer, args=(queueRead, queueChange, lock, ))
		processPool.apply_async(shower, args=(queueChange, ))
	
	processPool.close()		# 进程池不再接受任务
	processPool.join()		# 等待所有子进程结束
	
if __name__ == '__main__':
	print("=== Start ===")
	main()
	print("=== End ===")

效果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值