2016-11-08 122 views
1

按照ThreadPoolExecutorPython的多線程max_workers

如果max_workersNone或不給予documentation,將默認爲機器上的處理器數量。

如果我不把它像這樣

​​

值是壞的情況下的性能,我的價值是很低的(2)? python是否已經爲None值分配了所有的CPU進程,而爲數值分配的值只有2個?

回答

1

首先,您似乎在鏈接中引用了文檔的錯誤部分,即針對進程的文檔,而不是線程。所述one for concurrent.futures.ThreadPoolExecutor狀態:

改變在版本3.5:如果max_workersNone或沒有給出,則默認的機器,乘以5上的處理器的數量,假設的ThreadPoolExecutor經常用於重疊I/O而不是CPU工作,並且工人數量應該高於ProcessPoolExecutor的工作人員數量。


由於您使用的線程,而不是過程,假設您的應用程序是IO限制,沒有CPU的約束,並且您使用此爲concurrency, not parallelism。您使用的線程越多,您將實現的併發性越高(達到某個點),但獲得的CPU週期會更少(因爲會有上下文切換)。您必須在典型工作負載下測試您的應用程序,以查看哪些最適合您。對此沒有普遍的最佳解決方案。

+0

我正在使用python 2.7 - 在這種情況下會是什麼?我想問什麼,如果我限制或不限制,如果我想要我需要的最大工作人員(例如,我調用4種方法), – Dejell

+0

@Dejell首先,請注意,您已鏈接到Python 3.5文檔。無論如何,我的觀點是你需要嘗試不同的價值觀來看看對你有用。無論是你,還是Python標準庫的作者,都不能事先猜測什麼最適合你的情況。如果表現對你很重要,我不會依賴默認的暗示號碼。 –

+0

謝謝。這個「默認隱含號碼」是什麼?也許我缺少的東西 - 將python「分配」該內存的默認數量,或只有一個我寫execute.submit()? – Dejell