在我的应用程序中,我想在创建对象后的一定时间间隔后运行某个函数。 django-celery-beat 是执行此操作的正确工具吗?
如果您正在考虑使用 django-celery-beat 但只有几个任务需要安排,那么设置 Celery 可能会让人感觉有点大材小用,因为配置有时会非常耗时。在这种情况下,django-rq 提供了一种更简单的替代方案,使用 Redis 作为消息代理为后台任务提供类似的功能。
以下是如何开始使用 django-rq:
pip install django-rq
已安装的应用程序 = [ # 其他应用程序... 'django_rq',]
RQ_QUEUES = { 'default': { 'HOST': 'localhost', 'PORT': 6379, 'DB': 0, 'DEFAULT_TIMEOUT': 360, } }
# tasks.py in your app from myapp.models import MyModel def my_scheduled_task(object_id): obj = MyModel.objects.get(id=object_id) # Perform the desired action here print(f"Running task for object {obj}")
# models.py in your app from django.db import models from django.utils import timezone from datetime import timedelta import django_rq from myapp.tasks import my_scheduled_task class MyModel(models.Model): created_at = models.DateTimeField(auto_now_add=True) def save(self, *args, **kwargs): is_new = self.pk is None super().save(*args, **kwargs) # Schedule the task only if this is a new object if is_new: scheduler = django_rq.get_scheduler('default') run_at = timezone.now() + timedelta(hours=24) scheduler.enqueue_at(run_at, my_scheduled_task, self.id)
python manage.py rqworker 默认值
python 管理.py rqscheduler
总结 django-rq 提供了一个轻量级、Redis 支持的任务队列,非常适合小型任务,无需 Celery 的完整配置。它以最少的设置有效地处理计划任务和后台任务。