[英]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.