django-celery定时消息的简单应用


发布时间:2020-01-16 09:12    作者: 晖哥哥   已过去:1 年,10 月   阅读总量:959 已被赞:0


我在现在有这样一个需求,每隔一定的时间,系统就主动向用户推送文章表里阅读数量最多的这篇文章

模型准备:

#文章模型
class Book(models.Model):
    name = models.CharField(max_length=64)
    content = models.CharField(max_length=255)
    count = models.IntegerField()
    c_time = models.DateTimeField(auto_now_add=True)
    class Meta:
        db_table='book'

 

#用于记录当前发送哪篇文章给用户,每次调用都先清空,永远保存最新的一篇
class BookPush(models.Model):
    book_id = models.ForeignKey(to='Book',on_delete=models.DO_NOTHING,blank=True,null=True,db_column='book_id')
    p_time = models.DateTimeField(auto_now_add=True)
    class Meta:
        db_table = 'book_push'

 

#用于记录发送过的全部推荐文章,不清空
class BookPushlog(models.Model):
    book_id = models.ForeignKey(to='Book', on_delete=models.DO_NOTHING, blank=True, null=True, db_column='book_id')
    p_time = models.DateTimeField(auto_now_add=True)
    class Meta:
        db_table = 'book_push_log'

执行迁移命令,存入一下测试数据到Book表

在这个app 下新建一个tasks.py:

from .models import Book,BookPush,BookPushlog
from celery import task
@task
def push_book():
    book = Book.objects.order_by('-count').first()
    #将这个表清空
    BookPush.objects.all().delete()
    #将阅读数量第一的存入这个表
    book_push = BookPush(book_id=book)
    book_push.save()
    #这个表里也存一份
    book_push_log = BookPushlog(book_id=book)
    book_push_log.save()
    return "成功"

 

 

 settings.py 

#配置异步///////////////////////开始
import djcelery
djcelery.setup_loader()
from celery import platforms
platforms.C_FORCE_ROOT = True
#BROKER_URL = 'amqp://guest:guest@localhost:5672//'
BROKER_URL = 'redis://localhost:6379/1'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/2'
from kombu import Queue
CELERY_DEFAULT_QUEUE = 'worker_queue'
CELERY_QUEUE =(
    Queue('worker_queue',routing_key='worker_queue')
)
#配置异步///////////////////////结束

 

#定时任务异步配置开始
from datetime import timedelta
CELERYBEAT_SCHEDULE = {
    '定时消息发送':{
        'task':'bkkos.tasks.push_book',
        'schedule':timedelta(seconds=5),
        #队列,我们使用默认的
        'options':{
               'queue': 'worker_queue'
        }
    }
}
#定时任务异步配置结束

 在环境里启动异步:

 python manage.py celery worker -l INFO -B
 

 最后看到数据每5秒存入数据库一次

如果要实现给具体用户推送,该怎么做呢?思考下篇内容

点赞

0




登陆后方可评论