Celery 长任务并发配置

问题描述 投票:0回答:1

我正在寻找正确的 celery 配置来处理 django 中执行的长任务。

这些是案件的关键:

  • 任务需要几分钟才能完成,但处理是在远程服务器中完成的
  • worker 处理最少:它调用远程 API,等待响应并根据响应更新本地数据库
  • 多种类型的任务,每种任务类型根据其类型入队到一个队列,队列是动态的,这是它们最初无法定义的
  • worker 只能执行每种类型 1 个任务。我假设只有 1 个工作人员可以管理所有任务,因为其处理能力较低。

这是我到目前为止的配置:

 - CELERY_CREATE_MISSING_QUEUES = True
 - CELERYD_CONCURRENCY = 10
 - CELERYD_PREFETCH_MULTIPLIER = 1

工作线程以这种方式启动,它应该处理任何队列:

celery -A my_project worker --loglevel=info

我的芹菜应用程序是这样定义的:

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')

app = Celery('my_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
django celery
1个回答
0
投票

eventlet 确实是您队列的合适选择,特别是当您的任务是 I/O 密集型而不是 CPU 密集型时。 Eventlet 旨在通过使用协程和非阻塞套接字来高效处理 I/O 操作,非常适合任务花费大量时间等待外部资源(例如网络或磁盘 I/O)的场景。

这是此配置的链接https://docs.celeryq.dev/en/main/userguide/concurrency/eventlet.html

© www.soinside.com 2019 - 2024. All rights reserved.