Sé que esto ha sido respondido, pero en realidad es algo más complicado: las solicitudes y las respuestas se manejan en orden inverso.
se puede pensar en ello como esto:
- 0 - motor hace petición
- 1..inf - process_request middleware llama
- inf - descarga real ocurre (si una solicitud de middleware no lo hizo manejarlo)
- inf..1 - process_resonse middleware llama
- 0 - respuesta recibida por el motor
así que ... si etiqueto mi middleware como el número 1, será el PRIMER middleware de solicitud ejecutado y el ÚLTIMO middleware de respuesta ejecutado ... si mi middleware como 901 será el ÚLTIMO middleware de solicitud ejecutado y el middleware de PRIMERA respuesta ejecutado (si solo está definido el middleware predeterminado).
realmente la respuesta es que ES confuso. el inicio de la solicitud es el más cercano al motor (en cero) y el final de la solicitud es el más cercano al descargador (número alto). el inicio de la respuesta es el más cercano al descargador (número alto) y el final de la respuesta es el más cercano al motor (en cero). es como un viaje de ida y vuelta desde el motor ... aquí está el código relevante de scrapy que hace que esto sea tan divertido (con init copiado de MiddlewareManager de referencia y sólo el método relevante incluido):
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)
Como puede ver, los métodos de solicitud se abren en orden ordenado (se agrega un número más alto al reverso) y los métodos de respuesta y excepción se insertan al principio (el número más alto es el primero).
¿Cómo se puede concluir que el que está más cerca del motor es 542? Para la segunda pregunta, quiero preguntar el rango, ¿es de 0 a 999 o cualquier número entero? – Medorator
ver la actualización. – warvariuc