我有许多机器,每台机器都有一个 Django 实例,共享一个 Postgres 数据库。
我想运行 Celery,为了简单起见,最好使用 Django 代理和 Postgres 数据库。我没有大量任务要运行,因此没有必要使用不同的代理。
我想运行在本地文件存储上运行的 celery 任务。这意味着我希望 celery 工作者只运行触发事件的同一台机器上的任务。
目前的设置可以做到这一点吗?如果没有,怎么办?每台机器的本地 Redis 实例?
我有许多机器,每台机器都有一个 Django 实例,共享一个 Postgres 数据库。
我想运行 Celery,为了简单起见,最好使用 Django 代理和 Postgres 数据库。我没有大量任务要运行,因此没有必要使用不同的代理。
我想运行在本地文件存储上运行的 celery 任务。这意味着我希望 celery 工作者只运行触发事件的同一台机器上的任务。
目前的设置可以做到这一点吗?如果没有,怎么办?每台机器的本地 Redis 实例?
我想出了如何使这项工作。不需要花哨的路由或经纪人。
celeryd
我使用以主机命名的特殊队列运行每个实例。这可以自动完成,例如:
./manage.py celeryd -Q celery,`hostname`
settings.py
然后我在存储主机名的地方设置了一个主机名:
import socket
CELERY_HOSTNAME = socket.gethostname()
在每个 Django 实例中,这将具有不同的值。
然后我可以在异步调用我的任务时指定这个队列:
my_task.apply_async(args=[one, two], queue=settings.CELERY_HOSTNAME)