Python3中多執行緒程式設計的佇列運作示例

2022-10-04 23:12:35 字數 1554 閱讀 4507

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...