正如Alex Martelli建議的那樣,您可以使用多處理模塊。它與線程模塊非常相似,所以應該讓你輕鬆入門。你的代碼可能是這樣的,例如:
import multiprocessing
def get_page(*args, **kwargs):
# your web page downloading code goes here
def start_get_page(timeout, *args, **kwargs):
p = multiprocessing.Process(target=get_page, args=args, kwargs=kwargs)
p.start()
p.join(timeout)
if p.is_alive():
# stop the downloading 'thread'
p.terminate()
# and then do any post-error processing here
if __name__ == "__main__":
start_get_page(timeout, *args, **kwargs)
當然,你需要以某種方式獲得您的主頁下載代碼的返回值。爲此,您可以使用multiprocessing.Pipe或multiprocessing.Queue(或其他可用於多處理的方法)。有更多的信息,以及您可以在http://docs.python.org/library/multiprocessing.html檢查的樣本。
最後,多處理模塊包含在python 2.6中。它也可用於在Python 2.5和2.4在PyPI中(可以使用
easy_install的多處理
)
或只需訪問的PyPI和手動下載並安裝軟件包。
注意:我意識到這已經發布了一段時間。我遇到了類似的問題,在這裏偶然發現了Alex Martelli的建議。如果它執行我的問題,並決定分享它。 (我想感謝Alex指着我朝着正確的方向。)
問題是,當你有一個方法需要很長時間(例如urllib.read(),在某些情況下它會忽略超時),你我想打斷。 – kolinko 2013-09-12 15:08:09
如果你在自己的線程上執行該讀取,你不能簡單地停止等待它嗎?最終它會完成/失敗/完成,然後它就死了? – 2013-09-13 06:05:07