当前位置: 首页> 房产> 建材 > 深圳一医疗公司给员工放假10个月_宁波网站建设服务公司电hua_今天的重要新闻_市场调研报告范文3000字

深圳一医疗公司给员工放假10个月_宁波网站建设服务公司电hua_今天的重要新闻_市场调研报告范文3000字

时间:2025/7/11 8:43:01来源:https://blog.csdn.net/qq_24680545/article/details/146508422 浏览次数:0次
深圳一医疗公司给员工放假10个月_宁波网站建设服务公司电hua_今天的重要新闻_市场调研报告范文3000字

目录

在使用scrapy-redis这个库的时候,会出现以下的情况:
在这里插入图片描述
很烦,没说会一直监听啊,烦死了=。=,当时设置了一个拓展件RedisSpiderIdleTimeoutExtension,这个拓展件就是用来自动结束的。分布式部署的时候,这个是用不到的!!!

# extension.py
import time
from scrapy import signals
from scrapy.exceptions import NotConfiguredclass RedisSpiderIdleTimeoutExtension:"""Scrapy-Redis 空闲超时关闭扩展- 如果在指定时间内无新任务,自动关闭爬虫- 兼容分布式环境,避免空跑"""def __init__(self, timeout, crawler):self.crawler = crawlerself.timeout = timeout          # 超时时间(秒)self.last_activity_time = None # 最后活动时间戳@classmethoddef from_crawler(cls, crawler):# 检查扩展是否启用if not crawler.settings.getbool('REDIS_IDLE_TIMEOUT_ENABLED', True):raise NotConfigured# 从配置读取超时时间(默认5分钟)timeout = crawler.settings.getint('REDIS_IDLE_TIMEOUT', 300)ext = cls(timeout, crawler)# 连接信号:任务开始、处理成功、空闲crawler.signals.connect(ext.spider_opened, signal=signals.spider_opened)crawler.signals.connect(ext.request_scheduled, signal=signals.request_scheduled)crawler.signals.connect(ext.item_scraped, signal=signals.item_scraped)crawler.signals.connect(ext.spider_idle, signal=signals.spider_idle)return extdef spider_opened(self, spider):"""爬虫启动时初始化最后活动时间"""self.last_activity_time = time.time()spider.logger.info(f"启用空闲超时关闭,超时时间: {self.timeout}秒")def request_scheduled(self, request, spider):"""有新请求时更新活动时间"""self._update_activity()def item_scraped(self, item, spider):"""处理到Item时更新活动时间"""self._update_activity()def _update_activity(self):"""更新最后活动时间"""self.last_activity_time = time.time()def spider_idle(self, spider):"""空闲时检查超时"""if self.last_activity_time is None:return  # 初始状态无需处理current_time = time.time()idle_duration = current_time - self.last_activity_timeif idle_duration > self.timeout:spider.logger.info(f"空闲超过 {self.timeout} 秒,触发关闭爬虫")self.crawler.engine.close_spider(spider, 'idle_timeout')else:spider.logger.debug(f"当前空闲时间: {idle_duration:.1f}秒 (超时阈值: {self.timeout}秒)")

当然也要在settings.py文件里面添加配置:

#settings
EXTENSIONS = {"scrapy.extensions.telnet.TelnetConsole": None,'firstpc.middlewares.extensions.RedisSpiderIdleTimeoutExtension': 500,
}
# 设置空闲超时时间(5分钟 = 300秒)
REDIS_IDLE_TIMEOUT = 300
REDIS_IDLE_TIMEOUT_ENABLED = True

在这里插入图片描述

关键字:深圳一医疗公司给员工放假10个月_宁波网站建设服务公司电hua_今天的重要新闻_市场调研报告范文3000字

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: