生产者-消费者问题的实现使用了 Queue 对象,以及随机生产(消费)的商品的数量。生产者和消费者独立并且并发地执行线程。
import threading
from random import randint
from time import sleep, ctime
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 getResult(self):
return self.res
def run(self):
print("开始", self.name, ctime())
self.res = self.func(*self.args)
print("结束", self.name, ctime())
把结果保存在实例属性 self.res 中,并创建一个新的方法 getResult() 来获取这个值。
from random import randint
from time import sleep
from queue import Queue
def writeQ(queue):
print("生产对象", queue.put("xxx", 1))
print("大小", queue.qsize())
def readQ(queue):
val = queue.get(1)
print("从生产对象中消费", queue.qsize())
def writer(queue, loops):
for i in range(loops):
writeQ(queue)
sleep(randint(1, 3))
def reader(queue, loops):
for i in range(loops):
readQ(queue)
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("执行完毕")
if __name__ == "__main__":
main()