2017-01-20 135 views
1

我目前正在編寫一個Python 2.7程序,它使用Mechanize來查詢某個網站的一些URL信息。僞碼是這樣的:10秒後停止阻止操作?

for URL in urls: 
    # first submit a form to query the URL... 
    # then wait and parse the results: 
    while 1: 
     content = response.read(1024) 
     # followed by some other simple parsing operations ... 

讀()操作在while循環1是一個阻塞,並且由於網絡和其他條件,有時它運行下去。我試圖實現的是停止等待read()並跳轉到查詢下一個URL,如果當前的read()操作在10秒後沒有返回。如何計時read()操作並查看content在10秒後是否爲空?我正在考慮使用線程,但不知道如何繼續。誰能幫忙?提前致謝!

+2

使用'select' .... –

+0

我猜你正在使用的urllib2?看到這個答案:http://stackoverflow.com/questions/16646322/setting-the-timeout-on-a-urllib2-request-call –

+0

@MikePlacentra對不起,我剛剛更新我的帖子,我使用機械化,而不是urllib2。謝謝 – fittaoee

回答

1

嘗試使用在此所說明的超時裝飾 - https://pypi.python.org/pypi/timeout-decorator

+0

謝謝。我嘗試了該頁面上的示例代碼,但它似乎會引發異常並在發生超時時暫停程序。有沒有辦法阻止它在超時時引發異常並暫停程序? – fittaoee

+0

'嘗試'和'除了timeout_decorator.TimeoutError' – sberry

+0

您可以處理異常並繼續執行其餘程序,如下所示:

 'try: mytest() except timeout_decorator.TimeoutError as te: # do more' 
或者您可以分叉github回購(需要授權)並自定義[code] (https://github.com/pnpnpn/timeout-decorator/blob/master/timeout_decorator/timeout_decorator.py)@行#144不會引發異常,但可能會重試? – KMeansK