我一直在尋找一個很好的超時腳本,可以殺死一個線程,如果它已被激活超過X秒,但所有我看到的例子都有缺陷,並不總是停止線程。使用thread.join(x)最終會破壞它作爲線程的目的。Python Timeout
唯一像樣的例子,我發現是Timeout on a function call和一個不是沒有缺陷..
任何人都知道的一種更好的方式來做到這一點?
我一直在尋找一個很好的超時腳本,可以殺死一個線程,如果它已被激活超過X秒,但所有我看到的例子都有缺陷,並不總是停止線程。使用thread.join(x)最終會破壞它作爲線程的目的。Python Timeout
唯一像樣的例子,我發現是Timeout on a function call和一個不是沒有缺陷..
任何人都知道的一種更好的方式來做到這一點?
我知道這可能不是你想要的,但你有沒有考慮信號的方法? Timeout on a function call http://docs.python.org/library/signal.html#example
您可以在線程執行的開始設置報警信號,然後停在信號處理程序的線程。
查看我對python: how to send packets in multi thread and then the thread kill itself的回答 - 有一個帶有InterruptableThread類和示例的片段,它在超時後殺死另一個線程 - 正是您想要的。
在activestate中也有類似Python recipe。
Python的人們故意這麼做是因爲通常殺死可能寫入共享內存的東西是個壞主意。你可以使用一個進程而不是一個線程? – Dave 2009-05-01 15:06:11
那麼,在這種情況下,它是一個mod_wsgi腳本,所以它更多的是終止的事情。一旦腳本運行超過了時間限制,只需要殺死整個線程並退出,因此可能造成破壞的共享內存不是一個大問題。 – Ian 2009-05-01 15:24:15