我想爲密鑰異步查詢數據庫,然後向每個密鑰的多個URL發出請求。用於在多個請求中使用密鑰的異步查詢數據庫
我有一個函數從數據庫返回一個Deferred
,它的值是幾個請求的關鍵字。理想情況下,我會調用這個函數並從start_requests
返回一個Deferreds生成器。
@inlineCallbacks
def get_request_deferred(self):
d = yield engine.execute(select([table])) # async
d.addCallback(make_url)
d.addCallback(Request)
return d
def start_requests(self):
????
但嘗試這幾種方式提高
builtins.AttributeError: 'Deferred' object has no attribute 'dont_filter'
我採取意味着start_requests
必須返回Request
對象,而不是Deferreds其值爲Request
對象。蜘蛛中間件的process_start_requests()
也是如此。
或者,我可以向http://localhost/
發起初始請求,並在通過下載器中間件的process_request()
從數據庫獲得密鑰後,將它們更改爲真實URL。但是,process_request
只返回一個Request
對象;使用密鑰不能產生請求到多個頁面:嘗試yield Request(url)
提高
AssertionError: Middleware myDownloaderMiddleware.process_request
must return None, Response or Request, got generator
什麼是乾淨的解決方案,以
- 從數據庫
- 拿到鑰匙異步每個鍵,生成多個請求
看一看http://techspot.zzzeek.org/2015/02/15/asynchronous-python-and-databases/ – MishaVacic