2013-05-29 27 views
0

我對使用一個永久對象爲MyService的Web應用程序的工作。使用Web界面,我動態更新其狀態並監視其行爲。現在我想定期調用它的一種方法。我正在考慮使用芹菜PeriodicTask,但遇到一些範圍問題。看來我需要執行三個不同的進程:Django的服務器共享範圍芹菜工人

python manage.py runserver 
python manage.py celery worker 
python manage.py celerybeat 

的問題是,即使我保證爲MyService是可以安全使用多個線程單身,芹菜創建的對象自身的新副本。有沒有辦法在django服務器和芹菜主進程之間共享這個對象?我試圖找到一種方法,從Django腳本內啓動芹菜,但直到現在沒有成功。將不勝感激任何幫助。

回答

1

如果您需要共享多個進程,或者甚至多臺機器之間的東西(例如您的工人可以一個單獨的機器上運行)的最佳(可能比較容易)實踐共享信息將使用外部服務。

在最簡單的情況下,您可以使用Django的數據庫,但是如果您遇到這種情況不適合您,例如,如果您的寫入負載過重,則可以使用Redis或Memcache之類的東西(您也可以與之交談通過Django的緩存API)。這些將使你能夠處理一個大的寫入負載,除此之外你可以使用例如。 Redis作爲芹菜隊列。

+0

是的,我想這是圍繞通過簡單的靜態數據的方式。不幸的是爲MyService不僅僅是一個簡單的數據存儲,更是應該產生新的線程有一個回調函數。我想我會運行它作爲一個全新的服務,讓Django中直接使用套接字進行通訊。 – pegazik

+0

我不知道它應該做的完全是,但對於一個安全的方式有類似的東西,你也可以看看redis的發佈 - 訂閱或類似0mq消息隊列進行通信。 –