您的位置:首页 > 其它

生产-消费者问题

2017-03-04 12:01 176 查看
# -*- coding: UTF-8 -*-
import threading
import time
from random import randint
from Queue import Queue

class MyThread(threading.Thread):

def __init__(self, func, args, name =""):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args

def run(self):
apply(self.func, self.args)

def writeQ(queue):
print "producing object for Q..."
queue.put("XXX", 1)
print "size now", queue.qsize()

def readQ(queue):
val = queue.get(1)
print "consumed object from Q ...size now", queue.qsize()

def writer(queue, loops):
for i in range(loops):
writeQ(queue)
time.sleep(randint(1, 3))

def reader(queue, loops):
for i in range(loops):
readQ(queue)
time.sleep(randint(2, 5))

funcs = [writer, reader]
nfuncs = range(len(funcs))

def main():
nloops = randint(2, 5)
q = Queue(32)

threads = []

for i in nfuncs:
t = MyThread(funcs[i], (q, nloops), funcs[i].__name__)
threads.append(t)

for i in nfuncs:
threads[i].start()

for i in nfuncs:
threads[i].join()

print "all done"

if __name__ == "__main__":
main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐