【Python@Thread】queue模块-生产者消费者问题

python通过queue模块来提供线程间的通信机制,从而可以让线程分项数据。

个人感觉queue就是管程的概念

一个生产者消费者问题

 1 from random import randint
 2 from threading import Thread
 3 from queue import Queue
 4 from time import sleep
 5 
 6 
 7 def writeq(queue):
 8     print('starting put queue...')
 9     queue.put('hahaha', 1)          #1表示在有可用空间前,阻塞
10     print('size now', queue.qsize())
11 
12 
13 def readq(queue):
14     print('starting get queue...')
15     val = queue.get(1)              #1表示在有可用元素前阻塞
16     print('consume from queu...size now', queue.qsize())
17 
18 
19 def writer(queue, loops):
20     for i in range(loops):
21         writeq(queue)
22         sleep(randint(1, 3))
23 
24 
25 def reader(queue, loops):
26     for i in range(loops):
27         readq(queue)
28         sleep(randint(2, 5))
29 
30 
31 funcs = [writer, reader]
32 
33 
34 def main():
35     nloops = randint(2, 5)
36     q = Queue(32)
37 
38     threads = []
39     for i in range(len(funcs)):
40         t = Thread(target=funcs[i], args=(q, nloops))
41         threads.append(t)
42 
43     for i in range(len(funcs)):
44         threads[i].start()
45 
46     for i in range(len(funcs)):
47         threads[i].join()
48 
49     print('all done')
50 
51 if __name__ == '__main__':
52     main()

输出结果:

 

posted @ 2016-12-21 23:08  wilderness  阅读(393)  评论(0编辑  收藏  举报