如果无法访问外部依赖的api(cassandra、mysql等),我不想启动spider作业
classHealthCheck:
@staticmethod
def is_healthy():
config = json.loads(configHelper.get_data())
cassandra_config = config['cassandra']
cluster = Cluster(cassandra_config['hosts'],
port=cassandra_config['port'])
session = cluster.connect(cassandra_config['keyspace'])
try:
session.execute('SELECT 1')
except Exception as e:
logging.error(e)
return True
我可以在spider的init方法中调用is\u health,但是我必须对所有spider都这样做。有没有人有更好的建议,从哪里调用是健康的?
1条答案
按热度按时间wqnecbli1#
这不是一项容易的任务,例如,请参见本期。问题是,您不能在打开卡盘后立即将其关闭,因为这可能发生在发动机启动之前(请参阅此处)。然而,似乎有一个解决方案,虽然有点黑客。这是一个工作原型,作为一个粗略的扩展:
它在中执行健康检查
engine_started
信号处理器。如果失败,它将创建一个周期性任务(循环间隔尽可能短),尝试尽快(在引擎启动后)关闭spider。在中启用扩展
settings.py
:运行任意蜘蛛。它以适当的速度立即关闭
finish_reason
: