python3,開乙個執行緒,間隔1秒把乙個遞增的數字寫入佇列,再開乙個執行緒,從佇列中取出數字並列印到終端
#! /usr/bin/env python3
import time
import threading
import queue
# 乙個執行緒,間隔一定的時間,把乙個遞增的數字寫入佇列
# 生產者
class producer(threading.thr
def __init__(self, work_queue):
super().__in程式設計客棧it__() # 必須呼叫
self.work_queue = work_queue
def run(self):
num = 1
while true:
self.work_queue.put(num)
num = num+1
time.sleep(1) # 暫停1秒
# 乙個執行緒,從佇列取出數字,並顯示到終端
class printer(threading.thread):
def __init__(self, work_queue):
super().__init__() # 必須呼叫
self.work_queue = work_queue
def run(self):
while true:
num = self.work_queue.get() # 當隊列為空時,會阻塞,直到有資料
print(num)
def main():
work_queue = queue.queue()
producer = producer(work_queue)
producer.daemon = true # 當主線程退出時子執行緒也退出
producer.start()
printer = printer(work_queue)
pri程式設計客棧nter.daemon = true # 當主線程退出時子執行緒也退出
printer.start()
work_queue.join() # 主線程會停在這裡,直到所有數字被get(),並且task_done(),因為沒有呼叫task_done(),所在這裡會一直阻塞,直到使用者按^c
if __name__ == '__main__':
main()
queue是執行緒安全的,從多個執行緒訪問時無需加鎖。
如果在work_queue.get()之後呼叫work_queue.task_done(),那麼在佇列空時work_queue.join()會返回。
這裡work_queue.put()是間隔一定時間才往佇列放東西,如果呼叫work_queue.task_done(),在數字1被get()後,佇列空時,join()就返回,程式就結束了。
也就是程式只列印了1然後就退出了。
所以在這種使用情景下,不能呼叫task_done(),程式會一直迴圈下去。
本文標題: python3中多執行緒程式設計的佇列運作示例
本文位址: /jiaoben/python/122887.html
Python3多執行緒程式設計
多執行緒使用,可以讓乙個執行緒訪問某個資源,其他執行緒給他通過queue發任務,這樣避免對共享的資源編寫繁瑣的加鎖解鎖 threading包也提供了 locks,events,condition variables,and semaphores這些工具,可以做多執行緒間的資源共享.python有乙個...
Python3多執行緒程式設計
使用多執行緒還是使用多程序,怎麼樣來控制防止執行緒太多,導致執行緒失控,就是請求乙個任務,生成乙個程序,最終導致程序暴漲,進而無法控制。所以,對於任務數量一直在增加的程式,固定執行緒數量的執行緒池是必要的。一些說明 最佳執行緒數的獲取 對於io密集型模型 usr bin env python3 co...
Python3 多執行緒程式設計
python3中的多執行緒 python3關於多執行緒的模組 多執行緒使用 共享變數 繼續用保潔公司舉例子 python的標準庫提供了兩個模組 thread和threading import threading import time 1.類需要繼承自threading.thread class m...