生产消费者模式

来源:互联网 发布:nginx css 不显示 编辑:程序博客网 时间:2024/04/29 07:18
#!/usr/bin/env python# -*- coding: utf-8 -*-import threadingfrom time import ctimefrom random import randintfrom time import sleepfrom Queue import Queueclass CThread(threading.Thread):    def __init__(self, func, args, name=''):        threading.Thread.__init__(self)        self.name = name        self.func = func        self.args = args            def get_result(self):        return self.res            def run(self):        print '%s starting at %s.' % (self.name, ctime())        self.res = apply(self.func, self.args)        print '%s finished at %s.' % (self.name, ctime())        def writeQ(queue):    print 'producing object for Q ...'    queue.put('item', 1)    print 'queue size now %d' % queue.qsize()    def readQ(queue):    val = queue.get(1)    print 'consumed object from Q ... size now %d.' % 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))        def main():    funcs = [writer, reader]    nfuncs = range(len(funcs))        nloops = randint(2, 5)    q = Queue(32)        threads = []    for i in nfuncs:        t = CThread(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 task DONE"    if __name__ == '__main__':    main()

0 0
原创粉丝点击