本文實例講述了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相關內容感興趣的讀者可查看本站專題:《Python進程與線程操作技巧總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》、《Python+MySQL數據庫程序設計入門教程》及《Python常見數據庫操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。