1

私には2つのタスクがあります。タスク「heavy_task」には 1 の同時実行数が必要で、「lite_task」には 4 の同時実行数が必要です。

@task
def lite_task():
    tabla = Proc_Carga()
    sp = tabla.carga()
    return None

@task()
def heavy_task(idprov,pfecha):
    conci = Buscar_Conci()
    spconc = conci.buscarcon(idprov,pfecha)
    return None

settings.py ファイルでルートを定義します。

BROKER_URL = 'redis://localhost:6379/0'
CELERY_IMPORTS = ("pc.tasks", )
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_RESULT_BACKEND='djcelery.backends.cache:CacheBackend'
CELERY_ROUTES = {"tasks.heavy_task": {"queue": "heavy"},"tasks.lite_task": {"queue": "lite"}}

このように並行性を指定して 2 つのワーカーを実行してみます

celery multi start heavy lite -A provcon  -c:heavy 1 -c:lite 3

最初にタスク Heavy_task を呼び出したときは正常に機能し、同時実行性は機能しますが、タスク lite_task を呼び出した後、キューの同時実行性が大きく変化します。

私はこれを試します:

celery -A provcon worker -Q heavy -c 1

そして、タスク Heavy_task を実行すると、ルーティングが機能せず、タスクが実行されません。

しかし、これを使用する場合:

celery -A provcon -c 1

すべて正常に動作しますが、一度に 1 つのタスクしか実行できず、同時実行数 1 で Heavy_task を実行し、同時実行数 3 で lite_task を実行できる必要があります。

何かアドバイス

4

1 に答える 1

0

キューを機能させるためにさまざまな設定を試してみましたが、最終的にはそれができました。tasks.py ファイルで、タスク デコレータのキューをハードコーディングしました。

@task(queue = 'heavy')

ワーカーを実行するには、これを使用します。

celery multi start lite_w heavy_w -A provcon -Q:heavy_w heavy -Q:carga_w lite -l info -c:heavy_w 1 -c:lite_w 3 -E

そして、settings.py ファイルからルーティング設定を削除します。私の設定はこれです:

BROKER_URL = 'redis://localhost:6379/0'
CELERY_IMPORTS = ("pc.tasks", )
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_RESULT_BACKEND='djcelery.backends.cache:CacheBackend'
于 2015-05-04T17:27:26.407 に答える