2017-04-23 56 views
1

是否有任何全局參數(最好是env變量)可以設置爲限制Python使用的最大內核? 我知道有些參數需要爲多線程或numpy等特定軟件包設置,但我想控制Python本身,以確保它不會使用超過N個內核。如何限制python在Ubuntu中全局使用核心?

我想要一個全局參數的原因是,我可以將它設置給我的網絡中的用戶,以便我們能夠在同一臺機器上一起工作;目前,無論何時運行腳本,Python都會使用最多的內核,干擾其他內核。

Python版本2.6-7,Ubuntu版本14.04。

謝謝。

+1

因爲python [GIL](https://docs.python.org/3/glossary.html#term-global-interpreterlock)Python只會使用一個核心,如果你不使用多處理或一些其他類似的模塊(甚至不會在不同的內核上執行線程)。該參數究竟應該限制什麼? –

+0

Numpy例如使用許多內核,我不需要導入任何多處理包來實現這一點。由於我不確定它用於多處理的包是什麼,我希望有一個參數能夠以這種方式控制「更壞」的行爲,我可以肯定我可能使用的任何包。 – yoki

+0

numpy不在標準的python庫中。所以沒有python標誌或常量可以限制它可以使用的核心數量。 –

回答

0

使用affinity包可以將os級別上的每個進程限制爲單核。 affinity只是調用底層的linux sched_setaffinity函數,您可以將其設置爲特定的核心編號或範圍。

import affinity 
import os 
pid = os.getpid() 
affinity.set_process_affinity_mask(pid, 1) # 1 is the first core 
affinity.set_process_affinity_mask(pid, 2) # 2 is the second core 

看到pthread_setaffinity_np man page關於如何設置內核範圍的詳細信息,請注意,如果你想設置其他進程的親和力,你應該有權限來管理這一進程。 還注意到子進程繼承了父進程的親緣關係。

相關問題