2014-03-01 25 views
3

我正在運行一個python程序,這個程序對於很多可能的場景使用n-n算法的大O來說是一個相當密集的測試。它只是通過使用至少五個嵌套循環測試超過十億種不同的可能性來強制它。運行python程序時,是否可以強制計算機投入更少的CPU來換取更多時間?

無論如何,我不關心程序花費了多少時間。在很長一段時間內在後臺運行是很好的,只是我不能讓它堵塞CPU。 Python(3.3)有什麼方法可以將更少的CPU投入到程序中以換取更多時間?

在此先感謝。

+1

你在使用什麼操作系統?在Unix上,你可以使用[nice](http://en.wikipedia.org/wiki/Nice_%28Unix%29)來降低進程的優先級。 – unutbu

+0

我正在ubuntu上運行該程序,以便可以工作。感謝您的鏈接,我嘗試實施craig mcqueen提供的lowpriority函數,但它似乎並沒有阻止CPU混亂。 –

回答

4

更簡單的解決方案可能是更好或更好的應用程序。如果您運行的是Unix操作系統(Linux操作系統,* BSD,Mac的),嘗試這樣的事情:

nice -n 19 python my_code.py 

此處瞭解詳情:https://en.wikipedia.org/wiki/Nice_(Unix)

在Windows上,你可以嘗試通過任務管理器來設置優先級(在「進程」選項卡中找到Python進程,右鍵單擊並選擇「設置優先級」)。

+0

謝謝,我也可以在Ubuntu中設置系統監視器的優先級,這似乎是一個很好的臨時修復。但是,關於尼斯未來的使用,這是非常好的。非常感謝。 –

+0

這是非常高興知道;) – Schollii

1

第一個建議是將過程優先級降低到絕對最小值。

如果仍然沒有reponsive,你可以在睡眠撒()從時間模塊調用投降CPU

或購買新電腦有4個內核,只是讓它運行。我一直這樣做 - 效果很好。

ADDED

添加time.sleep()調用會留下一個單CPU系統中運行的 「突發」。同樣sleep(0)可能會在內部循環中生效,因爲它會產生cpu,但如果沒有其他人想使用cpu,則會很快重新調度。 OOPS,忘了檢查,你正在使用Linux - 睡眠(0)什麼都不做。你可以調用本地的sched_yield()API,不要認爲它是任何內置的Python。

相關問題