gpt4 book ai didi

django - 使用 django 和 celery 运行周期性任务

转载 作者:行者123 更新时间:2023-12-03 10:57:39 25 4
gpt4 key购买 nike

我正在尝试使用 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',
)

我在我的应用程序文件夹中放置了一个“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类(class)。

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

此外,这是我第一次使用任何类型的消息队列系统。看起来该任务将作为 celerybeat 的一部分执行process - 在 django web 框架之外。我是否仍然能够访问我创建的所有 django 模型。

谢谢,
文卡特。

最佳答案

Celerybeat it 的东西,它在需要时推送任务,但不执行它们。您可以执行存储在 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/login:guest pass:guest 上提供。在这里,您可以在线查看您的兔子实例中有多少任务。

关于django - 使用 django 和 celery 运行周期性任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com