CELERYD_CONCURRENCY、并发和自动缩放



我有几个关于任务路由、并发性和性能的问题。 这是我的用例:

我有一台专用服务器来运行芹菜任务,所以我可以使用所有 CPU 在这台服务器上运行芹菜工作器。

我有很多不同的 python 任务,我使用 : CELERY_ROUTES 路由,因为这些任务执行真正不同类型的 python 代码,所以我创建了 5 个不同的工作线程。 这些 worker 是在我使用 ansible 部署项目时创建的,下面是一个示例:

[program:default_queue-celery]
command={{ venv_dir }}/bin/celery worker --app=django_coreapp --loglevel=INFO --concurrency=1 --autoscale=15,10 --queues=default_queue
environment =
SERVER_TYPE="{{ SERVER_TYPE }}",
DB_SCHEMA="{{ DB_SCHEMA }}",
DB_USER="{{ DB_USER }}",
DB_PASS="{{ DB_PASS }}",
DB_HOST="{{ DB_HOST }}"
directory={{ git_dir }}
user={{ user }}
group={{ group }}
stdout_logfile={{ log_dir }}/default_queue.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=5
redirect_stderr=true
autostart=true
autorestart=true
startsecs=10
killasgroup=true 

我还有一个CELERY_QUEUES settings.py,可以在CELERY_ROUTES和我的芹菜程序(队列(之间架起桥梁

CELERY_DEFAULT_QUEUE = 'default_queue'

如果碰巧我不路由任务,它将转到我的"default_queue">

为了给所有队列提供空间,我将 --concurrency 设置为 1 表示default_queue,将最重要的队列设置为 1。

但我想知道,自动缩放是否对与并发相同的值有影响?意思是,如果我将并发设置为 1 并将 --autoscale 设置为 15,10(上面的例子(

我的工作线程是否会在 CPU 上"工作"并在此 CPU 上处理最多 15 个任务? 或者这意味着完全不同的东西?

同时设置concurrencyautoscale是没有意义的,因为两者都是控制给定工作线程实例的工作子进程数量的方法,如此处所述。

--concurrency N意味着您的工作线程实例将有正好 N 个工作器子进程(这意味着工作线程实例可以处理 N 个并行任务(。

--autoscale max, min意味着给定的工作线程实例将至少有min个,最多max个并发工作进程。

每个进程(主工作进程或其任何子进程(将在哪个 CPU 上运行是不可预测的,这是一个操作系统的事情,但不要假设子进程都会在同一个 CPU 上运行(很可能它们不会 - 这是实际上具有并发子进程的一部分(。

相关内容

  • 没有找到相关文章

最新更新