<p><strong>序言:</strong></p>
<p>我有一个蜘蛛,它把结果存储在数据库中。然后,为了节省一些时间和远程web服务器资源,我决定不请求数据库中已经存在的项。在阅读文档时,我认为定制spider中间件是我最好的选择。在</p>
<pre><code>class SkipDupeMiddleware(object):
process_spider_output(response, result, spider):
for r in result:
if isinstance(r, Request) and item_in_database(r.url):
log.msg('Skip %s' % r.url)
else:
yield r
</code></pre>
<p>{cddb>查询。在</p>
<p>它的效果也很好,节省了很多时间。在</p>
<p><strong>现在真正的问题是:</strong></p>
<p>后来我读到在非阻塞应用中使用阻塞数据库请求不是一个好主意。我一直在做正确的事情,并决定将我所有的db请求打包到<code>adbapi</code></p>
<p>我已经找到了在<em>管道</em>中使用<code>adbapi</code>的方法,但是在中间件级别是否可以这样做呢?中间件应该返回<code>BaseItem</code>、<code>Request</code>或{<cd6>},但是<code>adbapi</code>返回{<cd8>}的{<cd9>},后者稍后返回<code>Request</code>或{<cd6>}。在</p>
<p>现在我被卡住了。在</p>