3

我有许多机器,每台机器都有一个 Django 实例,共享一个 Postgres 数据库。

我想运行 Celery,为了简单起见,最好使用 Django 代理和 Postgres 数据库。我没有大量任务要运行,因此没有必要使用不同的代理。

我想运行在本地文件存储上运行的 celery 任务。这意味着我希望 celery 工作者只运行触发事件的同一台机器上的任务。

目前的设置可以做到这一点吗?如果没有,怎么办?每台机器的本地 Redis 实例?

4

1 回答 1

2

我想出了如何使这项工作。不需要花哨的路由或经纪人。

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)
于 2013-01-31T19:13:17.040 回答