私はこれが答えられたことを知っていますが、実際はもっと複雑なことです。要求と応答は逆の順序で処理されます。
あなたはこのように考えることができ:
- 0 - エンジンは
- 1..infを要求します - 要求ミドルウェアがなかった場合は、実際のダウンロードが起こる( - process一ミドルウェアは
- infファイルを呼び出しますそれを扱う)
- inf..1 - process_resonseミドルウェアは
- 0を呼び出す - エンジンが受信した応答
私のミドルウェアに番号1のタグを付けると、最初のリクエストミドルウェアが実行され、最後のレスポンスミドルウェアが実行されます...ミドルウェアが901として実行されると、LASTリクエストミドルウェアが実行され、FIRSTレスポンスミドルウェア実行されます(デフォルトミドルウェアのみが定義されている場合)。
本当に答えは、それが混乱しているということです。要求の開始はエンジンに最も近く(ゼロ)、要求の終了はダウンローダに最も近い(高い数値)。応答の開始はダウンローダ(高い番号)に最も近く、応答の終わりはエンジンに最も近い(ゼロで)。それは、エンジンから出て戻って旅のようなものだ...ここにこのすべてとても楽しい(INITと参照用MiddlewareManagerからコピーされ、唯一の関連するメソッドが含ま)を行うscrapyから該当するコードは次のとおりです。
class DownloaderMiddlewareManager(MiddlewareManager):
def __init__(self, *middlewares):
self.middlewares = middlewares
self.methods = defaultdict(list)
for mw in middlewares:
self._add_middleware(mw)
def _add_middleware(self, mw):
if hasattr(mw, 'process_request'):
self.methods['process_request'].append(mw.process_request)
if hasattr(mw, 'process_response'):
self.methods['process_response'].insert(0, mw.process_response)
if hasattr(mw, 'process_exception'):
self.methods['process_exception'].insert(0, mw.process_exception)
ご覧のように、リクエストメソッドはソートされた順番(背番号に高い数字が追加されています)に追加され、応答メソッドと例外メソッドが最初に挿入されます(高い番号が最初に追加されます)。
エンジンに近いものが542であるとどう結論していますか? 2番目の質問では、範囲を尋ねることを意味します。0〜999か整数ですか? – Medorator
更新を参照してください。 – warvariuc