2017-02-22 10 views
0

ラムダapiリクエストが来るたびにクロールする治療プロジェクトを展開しました。AWS LambdaでrunnningしたときにReactorNotRestartableエラーがスローされる

最初のAPIコールでは完全に実行されますが、後で失敗してReactorNotRestartableエラーがスローされます。

AWSラムダエコシステムがプロセスを殺しているわけではないので、原子炉はまだメモリに残っています。

次のようにラムダログエラーがある:

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 

ラムダハンドラ関数である:

def run_company_details_scrapy(event, context): 
    process = CrawlerProcess() 
    process.crawl(CompanyDetailsSpidySpider) 
    process.start() 

Iスタート機能のフラグを挿入することによって、反応器を停止しないことにより回避策を持っていた

process.start(stop_after_crawl=False) 

しかし、この問題は、私がラムダコールの時間エッチアウト。

他の解決方法を試してみましたが、どれも解決していないようです。この問題を解決する方法を教えてください。

+0

はぁ。 Lambdaは複数のイベントを処理するためにPythonプロセスを再利用しますか?ハンドラは同期して完了する必要がありますか? –

+0

@firefoxあなたは解決済みとして質問をマークして以来。問題を解決するためにかぎ針編みをどのように使用したか説明できますか? – Hugo

+0

@firefox私はawsラムダで治療を実行しようとするのは苦労している..どのようにあなたのzipファイルを作成しましたか?私は 'ImportError:名前をインポートできません 'etree'y –

答えて

0

https://pypi.python.org/pypi/crochetを使用して、ラムダ制御メインスレッドから非メインスレッドで実行されている原子炉の使用を調整できます。

かぎ針はスレッドレス原子炉の初期化を行い、メインから原子炉のスレッド内のコードを簡単に呼び出すためのツールを提供します(結果を得る)。

これは、ラムダがあなたのコードに持つ期待に沿ったものかもしれません。

1

この問題は、AWS Lambdaに固有の問題ではありません。running a spider in a Celery taskを参照してください。

ScrapyScript(開示:私が書いた)を試してみるかもしれません。それは、供給されたスパイダーがすべて終了するまでブロックしてから、終了する、Twistedリアクターをサポートするためのサブプロセスを生成します。セロリを念頭に置いて書かれていましたが、ユースケースは似ています。

お使いの場合には

、これは動作するはずです:

from scrapyscript import Job, Processor 
def run_company_details_scrapy(event, context): 
    job = Job(CompanyDetailsSpidySpider()) 
    Processor().run(job)` 
+0

TwistedとMulti-processingの偶発的な組み合わせにより、奇妙なデバッグが困難なエラーが発生します。たとえば、 - http://stackoverflow.com/questions/42347121/why-i-am-getting-sigchldwaker-object-has-no-attribute-dowrite-in-scrapy - ScrapyScriptはそのようなことに対処していますか? –

+0

@jschnurrラムダのモジュール初期化エラーでscrapyを使用したときに別のエラーが発生しました: 'twisted.internet.reactor' "成功なしでスクラップスクリプトを試しました。あなたはそのテーマについて考えていますか? – Hugo

関連する問題