2012-04-29 91 views
4

我想用Django-Celery-RabbitMQ組合創建一個簡單的背景定期任務。我安裝了Django 1.3.1,我下載並安裝了djcelery。這裏是我的settings.py文件看起來像:用django和芹菜運行定期任務

BROKER_HOST = "127.0.0.1" 
BROKER_PORT = 5672 
BROKER_VHOST = "/" 
BROKER_USER = "guest" 
BROKER_PASSWORD = "guest" 
.... 
import djcelery 
djcelery.setup_loader() 
... 
INSTALLED_APPS = (
    'djcelery', 
) 

而且我把「tasks.py」的文件在我的應用程序文件夾包含以下內容:

from celery.task import PeriodicTask 
from celery.registry import tasks 
from datetime import timedelta 
from datetime import datetime 

class MyTask(PeriodicTask): 
    run_every = timedelta(minutes=1) 

    def run(self, **kwargs): 
     self.get_logger().info("Time now: " + datetime.now()) 
     print("Time now: " + datetime.now()) 

tasks.register(MyTask) 

然後,我開始了我的Django的服務器(本地發展實例):

python manage.py runserver 

然後,我開始了celerybeat過程:

python manage.py celerybeat --logfile=<path_to_log_file> -l DEBUG 

我可以看到條目這樣在日誌中:

[2012-04-29 07:50:54,671: DEBUG/MainProcess] tasks.MyTask sent. id->72a5963c-6e15-4fc5-a078-dd26da663323 

而且我還可以看到在數據庫中獲取創建相應的條目,但我無法找到它的記錄我在指定的文本實際run功能在MyTask類。

我試着擺弄日誌設置,嘗試使用django記錄器而不是芹菜記錄器,但沒用。我甚至不確定,我的任務正在執行。如果我在任務中打印任何調試信息,它會去哪裏?

此外,這是我第一次使用任何類型的消息排隊系統。看起來這個任務將作爲celerybeat進程的一部分執行 - 在django web框架之外。我仍然可以訪問我創建的所有django模型。

謝謝, Venkat。

+0

當您運行celeryev時,您會看到什麼? – mossplix 2012-04-29 19:40:34

回答

5

Celerybeat它的東西,當需要時推送任務,但不執行它們。您可以執行存儲在RabbitMq服務器中的實例。你需要執行celeryd守護進程來執行你的任務。

python manage.py celeryd --logfile=<path_to_log_file> -l DEBUG 

此外,如果你使用RabbitMQ的,我建議你安裝特殊的RabbitMQ管理插件:

rabbitmq-plugins list 
rabbitmq-enable rabbitmq_management 
service rabbitmq-server restart 

這將可在http://:55672 /登錄:來賓通行證:客人。在這裏,你可以檢查你的兔子實例在線有多少任務。

0

您應該檢查RabbitMQ日誌,因爲celery會將任務發送到RabbitMQ並執行它們。所以任務的所有打印都應該在RabbitMQ日誌中。