本文实例讲述了Python多线程通信queue队列用法。分享给大家供大家参考,具体如下:
【下例为:sender线程发送直径给recvder线程,recvder计算得出周长】
import threading,time,queue,random
def sender():#sender发送直径
while True:
x=random.randint(1,10)
print("send done:",x)
q.put(x)#每个一秒就放入一个随机数
time.sleep(1)#每隔一秒就放入一个a
def recvder():#recvder计算周长
while True:
x=q.get()
print("recv done:",x*3.14)#每隔一秒就取出一个元素,计算结果
time.sleep(1)
q=queue.Queue()
t1=threading.Thread(target=sender)
t2=threading.Thread(target=recvder)
t1.start()
t2.start()
t1.join()
t2.join()
import threading,time,queue,random
def sender():#sender发送直径
while True:
x=random.randint(1,10)
print("send done:",x)
q.put(x)#每个一秒就放入一个随机数
time.sleep(1)#每隔一秒就放入一个a
def recvder():#recvder计算周长
while True:
x=q.get()
print(threading.current_thread(),"recv done:",x*3.14)#每隔一秒就取出一个元素,计算结果
time.sleep(2)
q=queue.Queue()
t1=threading.Thread(target=sender)
t2=threading.Thread(target=recvder)
t3=threading.Thread(target=recvder)
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
注:
队列可以有容量限制:
timeout的设置:
import threading,queue,time
"""
这个例子是:厂家跟司机约定,生产满3个,司机才来拉,
而一个个拉走,只有当3个都拉走,厂家才继续生产
"""
def producer():#厂家
while True:
for i in range(3):
q.put(i)
start_time=time.time()
q.join()##结果显示join这里堵塞住了厂家线程
print("wait time:",time.time()-start_time)#用来测试是否堵塞,证明不是因为司机的sleep堵塞运行
def driver():#老司机
while True:
for i in range(3):
print(q.get())
q.task_done()
print("")
time.sleep(2)
q=queue.Queue()
t1=threading.Thread(target=producer)
t2=threading.Thread(target=driver)
t1.start()
t2.start()
t1.join()
t2.join()
希望本文所述对大家Python程序设计有所帮助。
Powered By python教程网 鲁ICP备18013710号
python博客 - 小白学python最友好的网站!