在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能  Python/ scrapy 如何在raise CloseSpider后立刻停止?

scrapy 如何在raise CloseSpider后立刻停止?

重寫了RetryMiddleware的process_exception方法。期望在遇到特定問題的時(shí)候直接停止爬取。

from scrapy.exceptions import CloseSpider

class CustomRetryMiddleware(RetryMiddleware):
    def process_exception(self, request, exception, spider):
        if xxx:
            raise CloseSpider('強(qiáng)制停止')
        

但是在實(shí)際運(yùn)行時(shí)發(fā)現(xiàn)。在并發(fā)較高或者任務(wù)較多的情況下。在raise之后還會(huì)處理相當(dāng)長一段時(shí)間的任務(wù)才會(huì)退出。

請問是我的raise 使用方法有問題,還是我哪里的配置需要修改?

.有哪位大佬知道怎么處理嗎

回答
編輯回答
薄荷綠

還記得settings.py中的CONCURRENT_REQUESTS = 16配置嗎?
姑且當(dāng)作是16個(gè)并發(fā)一起運(yùn)行,當(dāng)其中一個(gè)協(xié)程拋出異常(CloseSpider('強(qiáng)制停止')),他只會(huì)把自己給停止。所以要等到其他十五個(gè)協(xié)程都拋出異常之后整個(gè)爬蟲才能退出。

這十六個(gè)并發(fā)沒有完成請求但url卻被保存到xxx:dupefilter去重隊(duì)列中去。所以以后這十六個(gè)url都不再會(huì)被請求了。

2018年4月18日 11:03