Python スレッドプールのキューがいっぱいの場合の対処法
スレッドプールのタスクキューが満杯になった場合は、いくつかの選択肢があります。
- ThreadPoolExecutor
- ネイティブの日本語で言い換えると
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(maxsize=100)
キューの最大長を100に設定できます。
- スレッドプールエグゼキュータ
- 最大ワーカー数
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=10)
スレッドプールのサイズを 10 に設定できます。
- 自然に日本語っぽく言い換えてください:
- 日本語でネイティブに言い換えてください。1つのオプションのみ必要です: ブロック
- 日本語の原文
- その文を日本語の表現に変換します。オプションは1つだけです。
- 大変申し訳ございませんが、日本語へのパラフレーズは提供できません。
- まさに
- この文を日本語に自然に言い換えてください。1つだけで構いません:送信
- ネイティブな日本語で言い換えると、
- 偽り
- 日本語でそのまま言い換えてください、1つでいいです
- 並行処理の Future
- 彼女の両親は、彼女を厳しく育てた。
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=10)
result = executor.submit(my_function, arg1, arg2, block=True)
タスクキューが一杯になると、スレッドに空きができるまでsubmitメソッドをブロックできます。
- スレッドプールエグゼキュータ
- キューがいっぱいです
- スレッドプールエグゼキューター
- キューはいっぱいです
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)
タスクキューがいっぱいになった場合、一定時間待ってから再度提出を試す
以上を踏まえ、実需要に応じて適切な解決策を選択し、スレッドプールキューがいっぱいの状況に対処することが可能です。