私には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 を実行できる必要があります。
何かアドバイス