簡體   English   中英

線程池的限制從何而來?

[英]Where does the limitation of the thread pool come from?

使用以下代碼,我發現multiprocessing.pool.ThreadPool的最大大小為11689(在我的機器上)。 如果我加大它,我得到

RuntimeError:無法啟動新線程

有人可以解釋它的來歷嗎? 11689似乎是一個奇怪的系統常量,所以也許我用光了資源?

請注意:這與如何為線程池選擇最佳線程數無關。 這個問題是關於11689的來源?

簡要了解CPython源代碼處理線程,這表明在線程創建失敗時,解釋器不會過多地研究細節 它只會引發您看到的RuntimeError

根據pthread_create聯機幫助頁,線程創建可能由於以下錯誤代碼和原因而失敗。

EAGAIN資源不足,無法創建另一個線程。

EAGAIN遇到了系統施加的線程數限制。 有許多限制可能觸發此錯誤:達到了RLIMIT_NPROC軟資源限制(通過setrlimit(2)設置),該限制限制了實際用戶ID的過程和線程數。 達到了內核在系統范圍內對進程和線程數的限制,即/ proc / sys / kernel / threads-max(請參閱proc(5)); 或已達到PID的最大數量/ proc / sys / kernel / pid_max(請參閱proc(5))。

...

我的盲目猜測是,您是在引發第一個問題,而不是第二個問題。 您可能會用盡內存來分配新線程。

此鏈接中可以找到有關線程創建失敗的更深入的解釋。

不過,這是一個盲目的猜測。 解釋器進行的更詳細的錯誤處理肯定會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM