我有一個腳本運行了很多併發線程(至少200)。每個線程都會進行一些相當複雜的評估,這可能會花費大量的時間。評估方法在C中實現,我無法更改它。我想限制每個線程的方法執行時間。請指教。如何限制python多線程環境中的函數執行時間?
回答
從我所瞭解的問題來看,使用多處理而不是多線程可能是一個很好的例子。多重處理將允許您使用系統上的所有可用資源 - 如果您不小心,可以使用一些資源。
線程實際上並不是並行運行,所以除非你正在做很多等待I/O或類似的事情,否則從一個單獨的進程調用它會更有意義。您可以使用Python multiprocessing library從Python腳本中調用它,也可以使用用C語言編寫的包裝器並使用某種形式的interprocess communication。第二個選項將避免啓動另一個Python實例來運行一些C代碼的開銷。
您可以調用time.sleep(或執行其他任務並檢查系統時鐘的已用時間),然後在期望的時間間隔後檢查結果,允許任何尚未完成的進程在使用時繼續運行的結果。或者,如果你不在意這一點,你可以發送一個信號來殺死這個過程。
OP表示計算結果在C中。C擴展可以釋放GIL,因此所有CPU內核都可以在不進行多處理的情況下使用 – jfs
此外,您可能不希望一次在系統上運行200個進程,尤其是在CPU密集型。最好是批量運行它們,否則會引入額外的開銷,因爲它們都爭用可用的CPU時間和內存。 – 2012-08-31 23:39:23
@ J.F.Sebastion:這樣做更有意義。不過,你不想一次運行200個這樣的東西。 – 2012-08-31 23:52:16
- 1. 在多線程環境中測量線程的執行時間
- 2. 多線程環境中的mkdirs()函數
- 3. 執行Java函數的時間限制
- 4. 如何在javascript中限制函數的執行時間?
- 5. 如何在c sharp中限制函數的執行時間?
- 6. 限制函數執行時間
- 7. Python:線程執行時間
- 8. 線程環境塊如何在地址空間限制之上?
- 9. 在多線程環境中限制連接組的速率
- 10. 限制執行時間在java中的線程樣本
- 11. Python:無限循環中的多線程
- 12. 在多線程環境中並行執行每個子任務
- 13. 使用Python中的多線程測量執行時間
- 14. scraperwiki如何限制執行時間?
- 15. 限制計時器線程執行時間
- 16. python程序的執行次數限制
- 17. 如何限制C#foreach循環執行最大時間限制的迭代
- 18. 多線程python程序的執行時間
- 19. 測量多線程的執行時間
- 20. 在沒有線程的情況下限制Java執行時間
- 21. 可以在多處理器環境中執行Java線程嗎?
- 22. 線程數與線程數限制和執行過程參數
- 23. Python不能在多線程環境
- 24. PHP - 執行時間限制
- 25. didReceiveNotificationRequest:withContentHandler - 執行時間限制?
- 26. 在Python中控制線程執行時間
- 27. 如何關閉多線程環境中的線程java
- 28. 如何在Python中自動測量函數的執行時間
- 29. 如何在python中執行一段時間的函數?
- 30. Python在多線程時節省執行時間
這個問題和你的[other one]有什麼不同?(http://stackoverflow.com/questions/12222349/is-there-a-canonical-way-of-terminating-a-thread-in-python)? –
@DavidRobinson這是另一項任務。我不想終止線程。它必須後處理部分評估結果。 –
我以爲你說過你不能修改評估。如果無法修改,它如何返回部分結果? –