2013-01-31 18 views
3

我有多臺機器,每臺機器都有一個Django實例,共享一個Postgres數據庫。我可以將芹菜工人與給定共享數據庫的特定實例綁定嗎?

爲了簡單起見,我想運行Celery,最好使用Django代理和Postgres數據庫。我沒有大量的任務運行,所以沒有必要使用其他經紀人。

我想運行在本地文件存儲上運行的芹菜任務。這意味着我希望芹菜工作者只運行觸發事件的同一臺機器上的任務。

這是可能的目前的設置?如果不是,那怎麼辦呢?每臺機器的本地Redis實例?

回答

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) 
相關問題