python 的執行緒池如何獲取 work 佇列中的訊息數量

ponponon發表於2022-06-20

python 的執行緒池使用的是一種生產者消費者的模型

from concurrent.futures import ThreadPoolExecutor
from loguru import logger
import requests
import time

pool = ThreadPoolExecutor(max_workers=10)


def func_get():
    response = requests.get('http://127.0.0.1:5002')
    time.sleep(10)


def func_callback():
    pass


for i in range(100):
    feature = pool.submit(func_get)
    feature.add_done_callback(func_callback)

在其他執行緒中呼叫 pool 的 queue 的 submit 介面的時候,task 會被提交給 pool 中的 queue

work thread 會從 queue 中去任務做,如果佇列為空,則阻塞掛起

from concurrent.futures import ThreadPoolExecutor


pool = ThreadPoolExecutor(max_workers=10)
pool._work_queue.qsize()

可以使用 _work_queue 訪問到這個內部佇列

參考資料:
Python 的執行緒池的回撥函式是在主執行緒還是工作執行緒中執行的?

相關文章