我正在寻找正确的 celery 配置来处理 django 中执行的长任务。
这些是案件的关键:
这是我到目前为止的配置:
- 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()
eventlet 确实是您队列的合适选择,特别是当您的任务是 I/O 密集型而不是 CPU 密集型时。 Eventlet 旨在通过使用协程和非阻塞套接字来高效处理 I/O 操作,非常适合任务花费大量时间等待外部资源(例如网络或磁盘 I/O)的场景。
这是此配置的链接https://docs.celeryq.dev/en/main/userguide/concurrency/eventlet.html