gevent を使用していくつかの HTML ページをダウンロードしています。遅すぎるウェブサイトもあれば、一定期間後にリクエストの処理を停止するウェブサイトもあります。そのため、一連のリクエストの合計時間を制限する必要がありました。そのために、gevent "Timeout" を使用します。
timeout = Timeout(10)
timeout.start()
def downloadSite():
# code to download site's url one by one
url1 = downloadUrl()
url2 = downloadUrl()
url3 = downloadUrl()
try:
gevent.spawn(downloadSite).join()
except Timeout:
print 'Lost state here'
しかし、問題は、例外が発生したときにすべての状態を失うことです。
サイト 'www.test.com' をクロールするとします。サイト管理者がメンテナンスのために Web サーバーを切り替えることを決定する直前に、10 個の URL をダウンロードすることができました。このような場合、例外が発生すると、クロールされたページに関する情報が失われます。
問題は、タイムアウトが発生した場合でも状態を保存してデータを処理するにはどうすればよいかということです。