任何时候你都可以开始做自己想做的事

搜索|
DJANGO启动 Celery Worker 的方式的和参数区别
发布时间:2024-09-01 06:37:49

配置好django的celery配置后 不管是win下还是Linux下,先进入python虚拟环境,然后cd 进入DJANGO项目根目录下(manage.py同一级目录),

执行以下命令启动celery worker

--------------------------------------------------------------------------------------------------------

如果你的celery.py(celery配置文件),是单独定义并且放在了setting.py同目录,可以使用下面的方式启动worker:

# 多进程模型

celery -A 项目名 worker --loglevel=info --concurrency=8

# 多线程模型

celery -A 项目名 worker --loglevel=info --concurrency=8 --pool=threads

# 事件驱动模型 (eventlet)

celery -A 项目名 worker --loglevel=info --pool=eventlet

# 事件驱动模型 (gevent)

celery -A 项目名 worker --loglevel=info --pool=gevent


如果你是单独的celery应用,celery配置文件是直接写在某个taks.py里面或者配置文件不在setting.py同目录的话

启动的项目名必须明确指向到celery配置文件所在位置,

比如项目根目录下你单独创建了一个celery_tasks目录,
然后创建了一个单独的一个tasks.py 的并且把celery 的配置也写在了tasks.py里面,
那就要明确指明task.py所在:
celery -A celery_tasks.tasks worker --loglevel=info
这样的启动方式
--------------------------------------------------------------------------------------------------------

参数说明:不同启动方式的效果

  1. 默认启动 (celery -A myproject worker --loglevel=info):

    • 如果你的系统有4个核心,Celery将启动4个工作进程。

    • 每个进程独立运行,可以充分利用多核优势。

    • 适合CPU密集型任务。

  2. 指定并发数 (celery -A myproject worker --loglevel=info --concurrency=8):

    • 固定并发数为8,即使系统只有4个核心。

    • 可能会导致某些核心过载,但可以提高任务吞吐量。

    • 适合任务队列较长的情况。

  3. 线程池模型 (celery -A myproject worker --loglevel=info --concurrency=8 --pool=threads):

    • 在单个进程中启动8个线程。

    • 线程间的切换开销较小,适合IO密集型任务。

    • 对于大量并发的网络请求或数据库操作非常有用。

--------------------------------------------------------------------------------------------------------
多进程模型:适合计算密集型任务,也可以并行处理 I/O 密集型任务。

多线程模型:更适合 I/O 密集型任务,但由于 GIL 的限制,在 CPU 密集型任务上的性能可能不如多进程模型。

事件驱动模型:最适合处理大量的并发连接和 I/O 密集型任务。

通过增加并发进程或线程的数量,你可以确保 Celery 同一时间并发地与多个 CDN 节点服务器通信并执行 SSH 命令。选择合适的并发模型可以根据你的具体需求来优化任务的执行效率。