2010-12-19 46 views
4

我正在設計一個分佈式系統,主節點在遠程機器上啓動一堆工作節點。由於我使用的是Python,並希望利用每個物理機器具有多個核心的優勢,因此我希望每臺機器運行多個工作節點(GIL等)。此外,每個工作節點可能會在每個「週期」所需的CPU數量上有很大差異。然而,我可以將工作節點分成幾部分,我的初始策略是產生比每臺機器有多個內核更多的工作節點。理由是如果少數節點需要更多的CPU,它們可以佔用更長的時間。 (如果每個節點已經受CPU限制,則不會突然需要更多的CPU。)我怎樣才能準確衡量一個python進程的CPU時間?

這會將我帶到一個問題:如何準確衡量python進程的CPU時間?

我無法天真地測量時間,我需要專門爲特定過程花費的時間。也就是說,對於每個進程,我想要一個數字X,儘可能準確地表示專門用於該進程的CPU資源量,而不管不相關的進程。 (我一直在看python的getrusage,但是它似乎只給出了ubuntu的精度的2個小數點,這是不夠的。編輯:這也發生,如果我直接在C中使用getrusage();最多0.01秒的精度。沒有雪茄)

我的具體用例是測量每個節點週期的CPU時間,從開始到結束,其中End在Start後約0-30ms內發生。

最好的答案是在Python中做到這一點的便攜方式。需要使用C擴展的方法很好。

+0

你檢查過'timeit'模塊嗎? – dheerosaur 2010-12-19 14:01:09

+0

對不起,但這與這個問題完全無關。 – porgarmingduod 2010-12-19 14:15:48

回答

1

至少對於Linux來說,快速回答是使用getrusage以及具有更高分辨率計時器的內核。

我最初的測試給出了10ms的可怕精度的原因是因爲顯然64位ubuntu默認配置爲100hz計時器。