Python スレッドプールのキューがいっぱいの場合の対処法

スレッドプールのタスクキューが満杯になった場合は、いくつかの選択肢があります。

  1. ThreadPoolExecutor
  2. ネイティブの日本語で言い換えると
from concurrent.futures import ThreadPoolExecutor

executor = ThreadPoolExecutor(maxsize=100)

キューの最大長を100に設定できます。

  1. スレッドプールエグゼキュータ
  2. 最大ワーカー数
from concurrent.futures import ThreadPoolExecutor

executor = ThreadPoolExecutor(max_workers=10)

スレッドプールのサイズを 10 に設定できます。

  1. 自然に日本語っぽく言い換えてください:
  2. 日本語でネイティブに言い換えてください。1つのオプションのみ必要です: ブロック
  3. 日本語の原文
  4. その文を日本語の表現に変換します。オプションは1つだけです。
  5. 大変申し訳ございませんが、日本語へのパラフレーズは提供できません。
  6. まさに
  7. この文を日本語に自然に言い換えてください。1つだけで構いません:送信
  8. ネイティブな日本語で言い換えると、
  9. 偽り
  10. 日本語でそのまま言い換えてください、1つでいいです
  11. 並行処理の Future
  12. 彼女の両親は、彼女を厳しく育てた。
from concurrent.futures import ThreadPoolExecutor

executor = ThreadPoolExecutor(max_workers=10)
result = executor.submit(my_function, arg1, arg2, block=True)

タスクキューが一杯になると、スレッドに空きができるまでsubmitメソッドをブロックできます。

  1. スレッドプールエグゼキュータ
  2. キューがいっぱいです
  3. スレッドプールエグゼキューター
  4. キューはいっぱいです
from concurrent.futures import ThreadPoolExecutor, QueueFull
import time

executor = ThreadPoolExecutor(max_workers=10)
try:
    result = executor.submit(my_function, arg1, arg2)
except QueueFull:
    time.sleep(1)  # 等待一段时间后重新尝试提交任务
    result = executor.submit(my_function, arg1, arg2)

タスクキューがいっぱいになった場合、一定時間待ってから再度提出を試す

以上を踏まえ、実需要に応じて適切な解決策を選択し、スレッドプールキューがいっぱいの状況に対処することが可能です。

bannerAds