pythonqueue线程_python 多线程编程之Queue | 学步园

Queue模块可以用来进行线程间通讯,让各个线程之间共享数据。现在,我们创建一个队列,让

生产者(线程)把新生产的货物放进去供消费者(线程)使用。

在下列的例子中我们将演示生产者生产货物,然后把货物放到一个队列  之类的数据结构中,生产货物所要花费的时间

无法预先确定。消费者消耗生产者生产  的货物的时间也是不确定的。

我们首先用到的还是之前我们创建的多线程通用类myThreads.py

'''

Created on 2010-12-16

@author: Administrator

'''

import threading

from time import ctime

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 'starting',self.name,'at:',ctime()

self.res=apply(self.func,self.args)

print self.name,'finished at:',ctime()

接下来就是我们的主程序,生产者-消费者问题 (prodcons.py)

'''

Created on 2010-12-17

@author: Administrator

'''

from random import randint

from time import sleep

from Queue import Queue

from myThread import MyThread

def writeQ(queue):

print 'producting object for Q...',

queue.put('test',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)

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 'all DONE'

if __name__=='__main__':

main()

运行效果图如下:

0_1292596019HD6U.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值