3

3 クラスタ マシンで celery + rabbitmq をセットアップしました。ファイルのデータに基づいて正規表現を生成し、その情報を使用してテキストを解析するタスクも作成しました。ただし、ファイルの読み取りプロセスは、as タスクの実行ごとではなく、ワーカーのスポーンごとに 1 回だけ実行されることを望みます。

from celery import Celery

celery = Celery('tasks', broker='amqp://localhost//')
import re

@celery.task
def add(x, y):
     return x + y


def get_regular_expression():
    with open("text") as fp:
        data = fp.readlines()
    str_re = "|".join([x.split()[2] for x in data ])
    return str_re    



@celery.task
def analyse_json(tw):
    str_re = get_regular_expression()
    re.match(str_re,tw.text) 

上記のコードでは、ファイルを開き、ワーカーごとに 1 回だけ出力を文字列に読み取り、タスク analyse_json で文字列を使用する必要があります。

どんな助けでも大歓迎です、

ありがとう、アミット

4

1 に答える 1

1

get_regular_expressionモジュール レベルでの呼び出しを配置し​​ます。

str_re = get_regular_expression()

@celery.task
def analyse_json(tw):
    re.match(str_re, tw.text)

モジュールが最初にインポートされたときに一度だけ呼び出されます。

さらに、一度に実行するワーカーのインスタンスを 1 つだけにする必要がある場合 (CUDA など)、 -P solo オプションを使用する必要があります。

celery worker --pool solo

セロリ 4.4.2 で動作します。

于 2013-12-28T22:11:00.133 に答える