Tôi biết điều này đã được trả lời, nhưng thực sự nó là một điều phức tạp hơn - yêu cầu và phản hồi được xử lý theo thứ tự ngược lại.
bạn có thể nghĩ về nó như thế này:
- 0 - động cơ làm cho yêu cầu
- 1..inf - middleware process_request gọi
- inf - tải xuống thực tế xảy ra (nếu một middleware yêu cầu không xử lý nó)
- inf..1 - process_resonse middleware gọi
- 0 - phản ứng nhận được bởi các công cụ
vì vậy ... nếu tôi gắn thẻ phần mềm trung gian của tôi làm số 1 thì nó sẽ là phần mềm trung gian yêu cầu đầu tiên được thực thi và phần mềm trung gian phản hồi LAST được thực hiện ... nếu phần mềm trung gian của tôi là 901, nó sẽ là phần mềm trung gian yêu cầu LAST và phần mềm trung gian phản hồi FIRST được thực hiện (nếu chỉ định nghĩa phần mềm trung gian mặc định).
thực sự câu trả lời là nó gây nhầm lẫn. sự khởi đầu của yêu cầu là gần nhất động cơ (ở số không) và kết thúc của yêu cầu là gần nhất downloader (số cao). sự bắt đầu của đáp ứng là gần nhất của downloader (số cao) và kết thúc của phản ứng là gần nhất động cơ (ở số không). nó giống như một chuyến đi ra ngoài và trở lại từ động cơ ... đây là các mã có liên quan từ scrapy mà làm tất cả điều này rất thú vị (với init sao chép từ MiddlewareManager để tham khảo và chỉ có phương pháp có liên quan bao gồm):
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)
Như bạn có thể thấy, các phương thức yêu cầu được thêm vào thứ tự sắp xếp (số cao hơn được thêm vào phía sau) và các phương thức trả lời và ngoại lệ được chèn vào đầu (số cao hơn là trước).
Làm thế nào để bạn kết luận rằng thiết bị gần gũi hơn với động cơ là 542? Đối với câu hỏi thứ hai, tôi có nghĩa là để hỏi phạm vi, là nó 0 đến 999 hoặc bất kỳ số nguyên? – Medorator
xem bản cập nhật. – warvariuc