【发布时间】:2017-07-12 07:52:47
【问题描述】:
我已经部署了一个 scrapy 项目,它会在 lambda api 请求到来时进行抓取。
它在第一次 api 调用时运行良好,但后来它失败并抛出 ReactorNotRestartable 错误。
据我所知,AWS Lambda 生态系统并没有杀死进程,因此反应器仍然存在于内存中。
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()
我有一个解决方法,通过在启动函数中插入一个标志来停止反应器
process.start(stop_after_crawl=False)
但问题是我必须等到 lambda 调用超时。
尝试了其他解决方案,但似乎都不起作用。谁能指导我如何解决这个问题。
【问题讨论】:
-
嗯。 Lambda 重用您的 Python 进程来处理多个事件?你的处理程序必须同步完成?
-
@firefox 因为您将问题标记为已解决。你能描述一下你是如何使用钩针来解决你的问题的吗?
-
@firefox 我很难在aws lambda中运行scrapy ..你是如何创建你的zip文件的?我有一个
ImportError: cannot import name 'etree'
标签: amazon-web-services lambda scrapy twisted aws-lambda