我正在寻找合适的celery配置来处理django中执行的长任务。
这些是案件的关键:
*任务需要几分钟才能完成,但处理是在远程服务器中完成的
*worker处理量最小:调用远程API,等待响应,并根据响应更新本地数据库
- 有几种类型的任务,每个任务类型根据其类型排队到一个队列,队列是动态的,这是它们最初无法定义的
- worker只能执行每种类型的1个任务。我假设只有1个worker可以管理所有任务,因为它的处理量很低。
这是我到目前为止的配置:
- CELERY_CREATE_MISSING_QUEUES = True
- CELERYD_CONCURRENCY = 10
- CELERYD_PREFETCH_MULTIPLIER = 1
字符串
worker以这种方式启动,它应该处理任何队列:
celery -A my_project worker --loglevel=info
型
我的celery app是这样定义的:
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()
型
1条答案
按热度按时间vfwfrxfs1#
eventlet确实是一个适合队列的选项,特别是如果你的任务是I/O绑定的而不是CPU绑定的。Eventlet被设计为通过使用协程和非阻塞套接字来有效地处理I/O操作,使其非常适合任务花费大量时间等待外部资源(如网络或磁盘I/O)的场景。
这里是这个配置https://docs.celeryq.dev/en/main/userguide/concurrency/eventlet.html的链接