2017-04-21 179 views
0

我正在寫一個Python程序,它將從文本文件加載一個單詞表,然後嘗試使用每個單詞解壓縮存檔。如果沒有使用所有的cpu核心,那就不是很嚴重。 GIL的Bcuz,如果我沒有弄錯,用Python進行線程化並不是一個好的選擇。所以我想獲得cpu_cores的數量,拆分wordlist並使用multiprocessing.process模塊​​在不同的進程中處理wordlist的不同部分。但是每個進程都會自動固定到cpu內核上嗎?如果沒有,是否有辦法手動固定它們?如何將不同的進程固定到Python中的單個cpu核心

回答

2

您可以通過導入 import multiprocessing as mp使用蟒蛇multiprocessing並通過mp.cpu_count()找出處理器的數量,並應在大多數平臺上工作。

要在特定CPU內核上啓動程序/進程(在Linux中),您可以使用taskset並將此guide作爲參考。

另一種跨平臺解決方案是使用python的psutil包。

但是我建議你使用線程/進程池方法,因爲在我看來你應該讓操作系統把任務分配給每個cpu/core。你可以看看How to utilize all cores with python multiprocessing如何解決這個問題。

+0

感謝您的回答..是否在Windows上工作的任務?如果不是,有沒有Windows替代? – scripter

+1

@scripter我用psutil軟件包更新了我的答案,它是一個可在Windows上工作的跨平臺解決方案。要在Windows上使用taskset,您可能必須使用Cygwin或類似的東西。 – uzr

+1

@scripter,創建進程時,Windows cmd.exe shell的'start'命令可以設置CPU關聯和首選NUMA節點。也許有一種方法可以使用WMI(即wmic.exe)修改正在運行的進程的關聯性。您可以在PowerShell中使用'(Get-Process -Id $ target_pid).ProcessorAffinity = $ affinity_mask'來實現。 – eryksun

相關問題