在 Python 中为每个 Celery 任务分配特定数量的工人
Assign a specific number of workers for each Celery task in Python
我有三个 Celery 任务:
- 预测
- 培训
- 健康检查
我的机器有 4 个 CPU。我想分配 3 个工作人员进行预测和培训,1 个工作人员进行健康检查。实现它的最简单方法是什么?请注意,我要安排这些任务,因此,我不能直接在 apply_async() 函数中指定工作人员的数量。
实际配置:
CELERY = Celery(
CELERY_APP_NAME,
backend=CELERY_BACKEND,
broker=CELERY_BROKER,
include=["src.tasks"],
)
CELERY.conf.update({"task_routes": {"src.tasks.*": {"queue": "input_queue"}},
}
)
@CELERY.task
def prediction():
pass
@CELERY.task
def training():
pass
@CELERY.task
def healthcheck():
pass
以及给 运行 工人的命令:
celery --loglevel=INFO -A src.tasks worker -Q input_queue
这就是我要做的,因为我永远无法真正理解celery multi
:
celery -A yourproject.yourapp -l info -c 3 -Q prediction
celery -A yourproject.yourapp -l info -c 1 -Q healthcheck
在你 运行 类似于上面的内容(使用正确的应用程序参数)之后,你最终会得到两个订阅不同队列的工作人员。您的预测和训练任务将由 queue=prediction
以及其他命名参数触发,而健康检查任务应以类似方式发送到 healthcheck
队列。
我有三个 Celery 任务:
- 预测
- 培训
- 健康检查
我的机器有 4 个 CPU。我想分配 3 个工作人员进行预测和培训,1 个工作人员进行健康检查。实现它的最简单方法是什么?请注意,我要安排这些任务,因此,我不能直接在 apply_async() 函数中指定工作人员的数量。
实际配置:
CELERY = Celery(
CELERY_APP_NAME,
backend=CELERY_BACKEND,
broker=CELERY_BROKER,
include=["src.tasks"],
)
CELERY.conf.update({"task_routes": {"src.tasks.*": {"queue": "input_queue"}},
}
)
@CELERY.task
def prediction():
pass
@CELERY.task
def training():
pass
@CELERY.task
def healthcheck():
pass
以及给 运行 工人的命令:
celery --loglevel=INFO -A src.tasks worker -Q input_queue
这就是我要做的,因为我永远无法真正理解celery multi
:
celery -A yourproject.yourapp -l info -c 3 -Q prediction
celery -A yourproject.yourapp -l info -c 1 -Q healthcheck
在你 运行 类似于上面的内容(使用正确的应用程序参数)之后,你最终会得到两个订阅不同队列的工作人员。您的预测和训练任务将由 queue=prediction
以及其他命名参数触发,而健康检查任务应以类似方式发送到 healthcheck
队列。