gpt4 book ai didi

amazon-web-services - Scrapy 在 AWS Lambda 上运行时抛出错误 ReactorNotRestartable

转载 作者:行者123 更新时间:2023-12-03 21:28:32 30 4
gpt4 key购买 nike

我已经部署了一个scrapy项目,只要有 lambda api 请求,它就会爬行。

它在第一次 api 调用时运行良好,但后来失败并抛出 ReactorNotRestartable 错误。

据我所知,AWS Lambda 生态系统并没有杀死进程,因此 react 器仍然存在于内存中。

lambda 日志错误如下:

Traceback (most recent call last):
File "/var/task/aws-lambda.py", line 42, in run_company_details_scrapy
process.start()
File "./lib/scrapy/crawler.py", line 280, in start
reactor.run(installSignalHandlers=False) # blocking call
File "./lib/twisted/internet/base.py", line 1242, in run
self.startRunning(installSignalHandlers=installSignalHandlers)
File "./lib/twisted/internet/base.py", line 1222, in startRunning
ReactorBase.startRunning(self)
File "./lib/twisted/internet/base.py", line 730, in startRunning
raise error.ReactorNotRestartable()
ReactorNotRestartable

lambda 处理函数是:
def run_company_details_scrapy(event, context):
process = CrawlerProcess()
process.crawl(CompanyDetailsSpidySpider)
process.start()

我有一个解决方法,通过在启动函数中插入一个标志来停止 react 器
process.start(stop_after_crawl=False)

但问题是我不得不等到 lambda 调用超时。

尝试了其他解决方案,但似乎都不起作用。谁能指导我如何解决这个问题。

最佳答案

最近也遇到了同样的问题,Crochet因为种种原因不想工作了。

最终我们找到了肮脏的解决方案:只需调用 sys.exit(0) (或 sys.exit(1) 如果捕获到错误,而不是任何查看返回代码 AFAICT)在 lambda 处理程序函数的末尾。这非常有效。

如果您打算从 Lambda 返回响应显然不好,但如果您使用的是 Scrapy,数据可能已经通过您的 Pipelines 持久化,并使用调度程序作为 Lambda 的触发器,因此不需要响应。

注意:您将在 CloudWatch 中收到来自 AWS 的通知:

RequestId: xxxx Process exited before completing request 

关于amazon-web-services - Scrapy 在 AWS Lambda 上运行时抛出错误 ReactorNotRestartable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42388541/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com