使用django和芹菜运行定期任务

Ven*_*kat 4 django task celery

我正在尝试使用Django-Celery-RabbitMQ组合创建一个简单的背景周期性任务.我安装了Django 1.3.1,我下载并设置了djcelery.以下是我的settings.py文件的样子:

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',
)
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序文件夹中放入了一个'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)
Run Code Online (Sandbox Code Playgroud)

然后我启动我的django服务器(本地开发实例):

python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

然后我启动了这个celerybeat过程:

python manage.py celerybeat --logfile=<path_to_log_file> -l DEBUG
Run Code Online (Sandbox Code Playgroud)

我可以在日志中看到这样的条目:

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

而且我也可以看到在数据库中创建相应的条目,但是我找不到它runMyTask类中记录我在实际函数中指定的文本的位置.

我尝试摆弄日志记录设置,尝试使用django记录器而不是芹菜记录器,但没有用.我甚至不确定,我的任务正在执行.如果我在任务中打印任何调试信息,它会去哪里?

此外,这是我第一次使用任何类型的消息排队系统.看起来任务将作为celerybeat流程的一部分执行- 在django Web框架之外.我是否仍然可以访问我创建的所有django模型.

谢谢,Venkat.

Rus*_*tem 5

Celerybeat它的东西,它在需要时推送任务,但不执行它们.您在RabbitMq服务器中存储的任务实例.您需要执行celeryd守护程序来执行您的任务.

python manage.py celeryd --logfile=<path_to_log_file> -l DEBUG
Run Code Online (Sandbox Code Playgroud)

另外如果您使用RabbitMq,我建议您安装特殊的rabbitmq管理插件:

rabbitmq-plugins list
rabbitmq-enable rabbitmq_management
service rabbitmq-server restart
Run Code Online (Sandbox Code Playgroud)

它将在http://:55672/login:guest pass:guest.在这里,您可以在线查看兔子实例中的任务数量.