Ich habe ein Scrapy-Projekt bereitgestellt, die kriecht, wenn ein Lambda API Anforderungen kommt.Scrapy wirft Fehler ReactorNotRestartable beim Ausführen auf AWS Lambda
Es läuft perfekt für die erste API-Aufruf, aber später schlägt es fehl und wirft ReactorNotRestartable Fehler.
Soweit ich das verstehen kann, wird das AWS Lambda-Ökosystem den Prozess nicht töten, daher ist der Reaktor immer noch im Speicher vorhanden.
Die Lambda-Protokollfehler ist wie folgt:
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
Die Lambda-Handler-Funktion ist:
def run_company_details_scrapy(event, context):
process = CrawlerProcess()
process.crawl(CompanyDetailsSpidySpider)
process.start()
I eine Abhilfe hatte durch den Reaktor nicht zu stoppen, indem ein Flag in der Startfunktion Einfügen
process.start(stop_after_crawl=False)
Aber das Problem mit diesem war, dass ich warten musste, bis der Lambda-Aufruf Tim raus.
Andere Lösungen versucht, aber keiner von ihnen scheint zu funktionieren.Kann mir jemand Anleitung, wie man dieses Problem lösen.
Huh. Lambda verwendet Ihren Python-Prozess erneut, um mehrere Ereignisse zu verarbeiten? Und Ihr Handler muss synchron sein? –
@firefox Seit Sie die Frage als gelöst markiert haben. Können Sie beschreiben, wie Sie mit Häkeln Ihr Problem gelöst haben? – Hugo
@firefox Ich habe eine harte Zeit versucht, scrapy in einem aws Lambda zu laufen .. Wie hast du deine Zip-Datei erstellt? Ich habe einen 'ImportError: Name kann nicht importiert werden 'etree'' –