Python 当尝试在AWS Lambda上测试Scrapy网络爬虫时,出现了这个错误;引发错误。reactornotrestartable();

Python 当尝试在AWS Lambda上测试Scrapy网络爬虫时,出现了这个错误;引发错误。reactornotrestartable();,python,aws-lambda,scrapy,web-crawler,Python,Aws Lambda,Scrapy,Web Crawler,我将我的网络爬虫部署到AWS Lambda。然后,在测试时,它第一次正确运行,但第二次出现此错误。 在AWS lambda中引发错误.reactornotrestartable()twisted.internet.error.reactornotrestartable File "/var/task/main.py", line 19, in run_spider reactor.run() File "/var/task/twisted/internet/base.py", lin

我将我的网络爬虫部署到AWS Lambda。然后,在测试时,它第一次正确运行,但第二次出现此错误。 在AWS lambda中引发错误.reactornotrestartable()twisted.internet.error.reactornotrestartable

File "/var/task/main.py", line 19, in run_spider
    reactor.run()
  File "/var/task/twisted/internet/base.py", line 1282, in run
    self.startRunning(installSignalHandlers=installSignalHandlers)
  File "/var/task/twisted/internet/base.py", line 1262, in startRunning
    ReactorBase.startRunning(self)
  File "/var/task/twisted/internet/base.py", line 765, in startRunning
    raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable
爬虫程序在我的本地python环境中运行良好。我试图在main.py中运行的函数如下

def run_spider(event, s):
    given_links = []
    print(given_links)
    for t in event["Records"]:
        given_links.append(t["body"])
    runner = CrawlerRunner(s)
    deferred = runner.crawl('spider', crawl_links=given_links)
    deferred.addCallback(lambda _: reactor.stop())
    reactor.run()

def lambda_handler(event, context=None):
    s = get_project_settings()
    s['FEED_FORMAT'] = 'csv'
    s['FEED_URI'] = '/tmp/output.csv'
    run_spider(event, s)

事件看起来是这样的:

{
  "Records": [
    {
      "body": "https://example.com"
    }
  ]
}
最初,我使用CrawlerProcess而不是CrawlerRunner,但它也给出了相同的错误。然后在查看了StackOverflow的一些答案后,我将代码改为使用CrawlerRunner。有些人还建议使用钩针,我试过了,但出现了以下错误:

ValueError: signal only works in main thread in scrapy

我能做些什么来解决此错误?

这可能是的副本吗?也许,你是对的,但在该链接上没有一个解决方案对我有效。sys.exit()答案终于起作用了,但我想要一些不那么脏的东西。所以,我想最好再问一次这个问题?如果这是错误的,我很抱歉,我对StackOverflow这个东西还不熟悉。我会亲自投票赞成原来的问题,并与大家分享,询问是否有人能想出一个更干净的方法。