Python 胶状订单
Scrapy说: 第一 中间件更接近于 引擎和最后一个是一个更接近 到下载程序 决定分配给哪个顺序 您的中间件可以看到 下载程序\u中间件\u基础设置 然后根据位置选择一个值 您想插入中间件。这个 秩序很重要,因为每个人 中间件执行不同的操作 您的中间件可以依赖于 一些以前的(或以后的) 正在应用的中间件 从这一点上,我并不完全清楚更高的值是否会产生中间件 先被处决,反之亦然 例如 问题:Python 胶状订单,python,middleware,scrapy,Python,Middleware,Scrapy,Scrapy说: 第一 中间件更接近于 引擎和最后一个是一个更接近 到下载程序 决定分配给哪个顺序 您的中间件可以看到 下载程序\u中间件\u基础设置 然后根据位置选择一个值 您想插入中间件。这个 秩序很重要,因为每个人 中间件执行不同的操作 您的中间件可以依赖于 一些以前的(或以后的) 正在应用的中间件 从这一点上,我并不完全清楚更高的值是否会产生中间件 先被处决,反之亦然 例如 问题: 以下哪一项将首先执行?我的试验表明MW2将是第一个 订单的有效范围是多少?0-999 以下哪一项将首先执行
因此,由于这些值是整数,因此它们具有Python整数的范围。我知道这已经得到了回答,但实际上这是一件更复杂的事情——请求和响应的处理顺序相反 你可以这样想:
- 0-引擎发出请求
- 1..inf-进程请求中间件调用
- inf-实际下载发生(如果请求中间件没有处理它)
- inf..1-处理\u响应中间件调用
- 0-发动机接收到的响应
正如您所看到的,请求方法按排序顺序出现(后面添加的数字越高),响应和异常方法则插入到开头(数字越高)。您如何得出更接近引擎的方法是542的结论?对于第二个问题,我的意思是问范围,是0到999还是任何整数?
'myproject.middlewares.MW1': 543,
'myproject.middlewares.MW2': 542,
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)