私はPythonに不慣れで、さらにツイストに不慣れです。ツイストを使用して数十万のファイルをダウンロードしようとしていますが、エラーバックを追加しようとして問題が発生しています。ダウンロードが失敗した場合、不正なURLを印刷したいのですが。エラーをスローするために、意図的にURLのスペルを間違えました。ただし、私が持っているコードはハングし、Pythonは終了しません(errback呼び出しを削除すると正常に終了します)。
また、各ファイルを個別に処理するにはどうすればよいですか?私の理解では、すべてが完了すると「終了」と呼ばれます。ダウンロード時に各ファイルをgzipで圧縮して、メモリから削除したいと思います。
これが私が持っているものです:
urls = [
'http://www.python.org',
'http://stackfsdfsdfdsoverflow.com', # misspelled on purpose to generate an error
'http://www.twistedmatrix.com',
'http://www.google.com',
'http://launchpad.net',
'http://github.com',
'http://bitbucket.org',
]
def finish(results):
for result in results:
print 'GOT PAGE', len(result), 'bytes'
reactor.stop()
def print_badurls(err):
print err # how do I just print the bad url????????
waiting = [client.getPage(url) for url in urls]
defer.gatherResults(waiting).addCallback(finish).addErrback(print_badurls)
reactor.run()