queue队列消费者生产者测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from multiprocessing import JoinableQueue
from threading import Thread
 
def worker(q):
    while True:
        try:
            item = q.get()
            print(item)
            if item % 5 == 0:
                if item == 5:
                    time.sleep(20)
                q.put(111)
            q.task_done()
        except Exception as e:
            print(e)
 
q = JoinableQueue()
 
import time
def customer(q):
    for i in range(100):
        try:
            q.put(i)
        except Exception as e:
            print(e)
ct = Thread(target=customer, name='customer', args=(q,))
ct.daemon = True
ct.start()
ct.join()
for i in range(4):
    t = Thread(target=worker, name='worker'+str(i), args=(q,))
    t.daemon = True
    t.start()
 
q.join()
print('end')

一旦消费者速度快,生产者速度慢,可能导致提前结束

所以添加任务不能起一个线程,一直加,一旦速度慢下来,就提前结束了。

保险的是在worker中 task_done之前添加。

posted @   十年闷油瓶  阅读(198)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示