队列 先进先出1 from multiprocessing import Queue2 q = Queue(5) #队列的大小3 q.put(1) #放入内容4 q.put(2) #放入内容5 q.put(3) #放入内容6 q.put(4) #放入内容7 q.put(5) #放入内容8 print(q.full()) #你的队列...
队列 先进先出
1 from multiprocessing import Queue 2 q = Queue(5) #队列的大小 3 q.put(1) #放入内容 4 q.put(2) #放入内容 5 q.put(3) #放入内容 6 q.put(4) #放入内容 7 q.put(5) #放入内容 8 print(q.full()) #你的队列是否满了 9 print(q.get()) #取出队列中目前排在最前面的数 10 q.empty() #判断队列是否为空定义
1 from multiprocessing import Queue,Process
2 def produce(q):
3 q.put('hello')
4
5 def consume(q):
6 print(q.get())
7
8 if __name__ == '__main__':
9 q = Queue()
10 p = Process(target=produce,args=(q,))
11 p.start()
12 c = Process(target=consume, args=(q,))
13 c.start()
队里进程通信
生产者消费者模型,解决供需不平和的问题
1 # 队列
2 # 生产者消费者模型
3
4 # 生产者 进程
5 # 消费者 进程
6 import time
7 import random
8 from multiprocessing import Process,Queue
9 def consumer(q,name):
10 while True:
11 food = q.get()
12 if food is None:
13 print('%s获取到了一个空'%name)
14 break
15 print('\033[31m%s消费了%s\033[0m' % (name,food))
16 time.sleep(random.randint(1,3))
17
18 def producer(name,food,q):
19 for i in range(4):
20 time.sleep(random.randint(1,3))
21 f = '%s生产了%s%s'%(name,food,i)
22 print(f)
23 q.put(f)
24
25 if __name__ == '__main__':
26 q = Queue(20)
27 p1 = Process(target=producer,args=('Egon','包子',q))
28 p2 = Process(target=producer, args=('wusir','泔水', q))
29 c1 = Process(target=consumer, args=(q,'alex'))
30 c2 = Process(target=consumer, args=(q,'jinboss'))
31 p1.start()
32 p2.start()
33 c1.start()
34 c2.start()
35 p1.join()
36 p2.join()
37 q.put(None)
38 q.put(None)
实例
使用joinableQueue解决生产消费者问题
1 import time
2 import random
3 from multiprocessing import Process,JoinableQueue
4 def consumer(q,name):
5 while True:
6 food = q.get()
7 print('\033[31m%s消费了%s\033[0m' % (name,food))
8 time.sleep(random.randint(1,3))
9 q.task_done() # count - 1
10
11 def producer(name,food,q):
12 for i in range(4):
13 time.sleep(random.randint(1,3))
14 f = '%s生产了%s%s'%(name,food,i)
15 print(f)
16 q.put(f)
17 q.join() # 阻塞 直到一个队列中的所有数据 全部被处理完毕
18
19 if __name__ == '__main__':
20 q = JoinableQueue(20)
21 p1 = Process(target=producer,args=('Egon','包子',q))
22 p2 = Process(target=producer, args=('wusir','泔水', q))
23 c1 = Process(target=consumer, args=(q,'alex'))
24 c2 = Process(target=consumer, args=(q,'jinboss'))
25 p1.start()
26 p2.start()
27 c1.daemon = True # 设置为守护进程 主进程中的代码执行完毕之后,子进程自动结束
28 c2.daemon = True
29 c1.start()
30 c2.start()
31 p1.join()
32 p2.join() # 感知一个进程的结束
33
34 # 在消费者这一端:
35 # 每次获取一个数据
36 # 处理一个数据
37 # 发送一个记号 : 标志一个数据被处理成功
38
39 # 在生产者这一端:
40 # 每一次生产一个数据,
41 # 且每一次生产的数据都放在队列中
42 # 在队列中刻上一个记号
43 # 当生产者全部生产完毕之后,
44 # join信号 : 已经停止生产数据了
45 # 且要等待之前被刻上的记号都被消费完
46 # 当数据都被处理完时,join阻塞结束
47
48 # consumer 中把所有的任务消耗完
49 # producer 端 的 join感知到,停止阻塞
50 # 所有的producer进程结束
51 # 主进程中的p.join结束
52 # 主进程中代码结束
53 # 守护进程(消费者的进程)结束
View Code
沃梦达教程
本文标题为:Python——进程队列
猜你喜欢
- Python实现将DNA序列存储为tfr文件并读取流程介绍 2022-10-20
- CentOS7 安装 Python3.6 2023-09-04
- python线程池ThreadPoolExecutor与进程池ProcessPoolExecutor 2023-09-04
- Python 保存数据的方法(4种方法) 2023-09-04
- Python Pandas如何获取和修改任意位置的值(at,iat,loc,iloc) 2023-08-04
- python中defaultdict用法实例详解 2022-10-20
- 在centos6.4下安装python3.5 2023-09-04
- python中列表添加元素的几种方式(+、append()、ext 2022-09-02
- windows安装python2.7.12和pycharm2018教程 2023-09-03
- Python之路-Python中的线程与进程 2023-09-04
