2010-02-08 153 views
1

我正在使用thread.start_new_thread在我的Python應用程序中創建一個線程。停止python中的線程

如果三秒鐘內沒有完成,我該如何停止它?

+0

如果您正在下載數據,您可以設置套接字超時。 – wisty 2010-02-09 05:30:22

+0

你可能會對StackOverflow的[相關問題](http://stackoverflow.com/questions/2196999/how-to-add-a-timeout-to-a-function-in-python-cross-platform)感興趣。 – 2010-02-08 17:56:51

回答

1

如果您確實需要這樣做(例如,線程調用可能永久掛起的代碼),那麼考慮重寫您的代碼以使用多處理模塊產生一個進程。然後,您可以使用Process.terminate()方法殺死進程。當然,你需要2.6或更高版本。

1

你不能。線程不能從外面被殺死。您唯一能做的就是添加一種方法讓線程退出。顯然,如果線程在某個系統調用中被阻塞,你將無法做到這一點。

2

你不能直接這樣做。無論如何,放棄一個線程並不是一個好的做法 - 而是考慮使用同步機制,讓您以「軟」的方式中止線程。

但是如果不存在非守護線程(例如,如果唯一的主線程結束),daemonic threads將自動中止。也許這就是你想要的。

+0

這對我有用! – daviewales 2013-02-13 02:11:01

1

related question所述,您可能會通過ctypes.pythonapi引發異常,但在等待系統調用時可能會發生異常。