我有许多机器,每台机器都有一个Django实例,共享一个Postgres数据库。
我想运行Celery,最好使用Django代理和Postgres数据库来简化。我没有大量的任务要运行,因此不需要为此使用不同的代理。
我想运行在本地文件存储上运行的芹菜任务。这意味着我希望芹菜工作者只运行触发事件的同一台机器上的任务。
目前的设置是否可以实现?如果没有,怎么做?每台机器的本地Redis实例?
答案 0 :(得分: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)