2010-03-04 32 views
1

我有一個長時間運行的多線程程序,我想偶爾想調用一個函數Profile.runcall並將數據轉儲到一個文件中。能夠在多個線程中使用嗎?

hotshot documentation狀態:Note: The hotshot profiler does not yet work well with threads. It is useful to use an unthreaded script to run the profiler over the code you’re interested in measuring if at all possible.

不過,我已經測試具有多線程同時配置文件的功能,並且我沒有遇到任何問題。在我的情況下,被剖析的函數都是自包含的,並且在執行期間不會產生任何額外的線程。而且我確保每個對象都有自己的文件,這樣它們就不會互相打破。

所以我的猜測是關於多個線程的警告意味着如果被剖析的函數本身產生了額外的線程,那麼我會遇到問題。當我剖析產生其他線程的測試函數時,產生的線程不會被分析。但是,這仍然不會導致任何問題,因爲正在分析的函數似乎可以正常工作。

有人可以確認或反駁,在多線程程序中運行安全嗎?我不想部署可能會在以後崩潰的事情,即使它似乎通過了我的初始測試。

+1

不幸的是,我不能確認 - 有可能發生的競爭條件很少發生(當hotshot同時在多個線程上運行時),但可能會導致錯誤的答案(我不認爲它們可能會導致崩潰,但我不是100%肯定的)。只有仔細檢查otshot的源代碼(以及可能的鎖定獲取/釋放的策略插入)才能向您保證,這種競爭條件在您的用例中不會發生。 – 2010-03-04 16:02:11

+0

@亞歷克斯:感謝您的意見。我想我會確保在生產中關閉它,除非我得到更明確的答案。 – 2010-03-04 16:06:59

+1

「尚未正常工作」可能意味着使用線程運行時不夠準確。你應該看看你是否可以找到誰寫的,看看他們能否更好地告訴你它的含義 – 2010-03-04 20:32:17

回答

1

對於它的價值,我們在CubicWeb(使用多線程)中設置啓用熱點分析,並且到目前爲止,我在啓用分析時從未遇到過問題。

相關問題