0

プロジェクトにFlask、Gevent、およびscrapyを使用しています。基本的な考え方は、URL を入力すると、入力を引数としてクローラー プロセスが開始されるというものです。現在、websocket を介してパイプされた出力でうまく機能しているようです。

同時に実行されている複数のクローラーを処理するための最良の方法は何か知りたいので、2 人が同時に URL を入力した場合。これを行う最善の方法はキュー システムであると考えました。理想的には、同時に実行されるクローラーの量を制御できるようにしたいだけです。

私がすでに使用しているライブラリでこれを行う方法についての提案はありますか? それとも、別のアプローチを提案しますか?

4

2 に答える 2

0

クローラーがgeventジョブの場合は、プールを使用できます。

http://www.gevent.org/gevent.pool.html

グループのサブクラスが同時実行を制限する方法を提供するプール:プール内のグリーンレットの数がすでに制限に達した場合、空きスロットができるまで、そのスポーンメソッドはブロックします。

擬似コード:

crawler_pool = Pool(10)

def spawncrawler(url):
    def start():
         crawler_pool.spawn(crawl, url)  # blocks when max is reached.

    gevent.spawn(start)
    # give a response to the browser. this will always succeed because
    # i put the spawning of the crawler in a separate greenlet so if max 
    # 10 crawlers is reached the greenlet just holds on untill there is space
    # and client can get default response..
于 2013-01-04T20:46:49.920 に答える
0

各クローラーに対して、nodejs、webtcp(websocketの場合)および非同期呼び出しを試してください。また、クロールが終了したら、memcachedやredisなどの一時ストレージに有効期限キーを使用して保存できます。

したがって、同様のクロールリクエストがある場合は、一時ストレージからサービスを提供できます

于 2012-12-16T18:17:16.470 に答える