django怎么加消息列队(2023年最新解答)

导读:今天首席CTO笔记来给各位分享关于django怎么加消息列队的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

如何正确使用 Signal

 因为新的django开发人员得知signal之后, 往往会很高兴去使用它. 他们在能使用signal的地方就使用signal, 并且这是他们觉得自己是django专家一样. 然而, 像这样编码一段时间后, django项目就会变得异常复杂, 许多内容都纠结在一起无法解开.

简单回答是: 在其他方法无法使用的情况下, 才最后考虑使用signal.

因为新的django开发人员得知signal之后, 往往会很高兴去使用它. 他们在能使用signal的地方就使用signal, 并且这是他们觉得自己是django专家一样. 然而, 像这样编码一段时间后, django项目就会变得异常复杂, 许多内容都纠结在一起无法解开.

许多开发者也会将django signal和异步消息列队(例如celery)搞混. signal是同步处理, 因此通过signal调用大处理量的进程时并无法提高性能. 事实上, 将这些需要大处理量的进程移到signal中被视作是一种不好的习惯.

1. 何时使用signal

以下情况不要使用signal:

signal与一个model紧密相关, 并能移到该model的save()时

signal能使用model manager代替时

signal与一个view紧密相关, 并能移到该view中时

以下情况可以使用signal:

signal的receiver需要同时修改对多个model时

将多个app的相同signal引到同一receiver中处理时

在某一model保存之后将cache清除时

无法使用其他方法, 但需要一个被调函数来处理某些问题时

2. Signal的代替方法

使用mod而来manager

以下代码演示了当用户创建Event model时, 需要通知管理员, 如果改写model中的post_save(), 则需要添加额外的逻辑来区分用户还是管理员:

# myapp/managers.py

from django.db import models

class EventManager(models.Manager):

def create_event(self, title, start, end, creator):

event = self.model(title=title, start=start, end=end, creator=creator)

event.save()

event.notify_admins()

return event

在model中设置model manager:

 

# myapp/models.py

from django.conf import settings

from django.core.mail import mail_admins

from django.db import models

from model_utils.models import TimeStampedModel

from .managers import EventManager

class Event(TimeStampedModel):

STATUS_UNREVIEWED, STATUS_REVIEWED = (0, 1)

STATUS_CHOICES = (

(STATUS_UNREVIEWED, \"Unreviewed\"),

(STATUS_REVIEWED, \"Reviewed\")

)

title = models.CharField(max_length=100)

start = models.DateTimeField()

end = model.dateTimeField()

status = models.IntegerField(choices=STATUS_CHOICES, default=STATUS_UNREVIEWED)

creator = models.ForeignField(settings.AUTH_USER_MODEL)

objects = EventManager()

def notify_admins(self):

subject = \"{user} submitted a new event!\".format(user=self.creator.get_full_name())

message = \"\"\"TITLE: {title}

START: {start}

END: {end}\"\"\".format(title=self.title, start=self.start, end=self.end)

mail_admins(subject=subject, message=message, fail_silently=False)

在view中使用create_event()代替create()时, 便会通知管理员了.

在其他代码中验证model

如果你使用pre_save signal来验证某一model, 则应当尝试自己写一个validator取代之. 如果验证是通过ModelForm时, 通过改写clean()实现验证.

使用model的save()和delete()

如果使用pre_save 或 post_save signal, 如果可以, 则将这些代码移到model的save()方法中.

同样如果使用pre_delete 或 post_delete signal, 如果可以, 则将这些代码移到model的delte()方法中.

使用其他代码代替signal

如果可能, 我们可以将signal的逻辑使用其他帮助程序实现.

django怎么加消息列队(2023年最新解答)  第1张

django_rq添加的队列,需要控制台执行python manage.py rqworker 才能运行其中的任务,可是控制台关闭

1, 用绝对路径试试:D:\\logs\\log.txt; 2, 最后的exit去掉试试,反正最后一行执行完也会自然退出。 3, 另写一个简单的python测试脚本,里面只有一行 print \'Hello World\', 然后用上述批处理执行一下看看log对不对。

从事django,请问啥是消息队列?

消息队列可以简单理解为:把要传输的数据放在队列中。

作用的话在哪里都是一样的,3大作用

1 削峰--比如秒杀,系统忙不过来就先放到队列里,然后慢慢处理

2 解耦--如要寄快递,每个人都要知道怎么寄,但是如果设个中间人,大家快递交给他就不用管了,消息队列就相当于那个中间人

3 异步--和上面一样的快递例子,叫了快递我就要等着快递来然后再做后面的事情,但是有了中间人就方便了,中通来中间人就处理中通的快递,顺丰来中间人就处理顺丰的快递

Django xadmin 消息提醒(含demo)

Django xadmin 消息提醒(含demo)

DEBUG

INFO

SUCCESS

WARNING

ERROR

self.message_user(u\'告警,\',\'warning\')

self.message_user(u\'恭喜,\',\'success\')

self.message_user(u\'信息,\',\'info\')

self.message_user(u\'错误,\',\'error\')

django实现实时消息推送有什么好的方案

django实现实时消息推送,数据库数据一有变化就实时反应在页面上用作系统实时监控。 在一个HTTP访问周期里,如果要执行一个长时间任务,为了避免浏览器等待,后台必须使用异步动作。

与此同时也要满足实时需求,用户提交了任务后可以随时去访问任务详情页面,在这里用户能够实时地看到任务的执行进度。针对异步任务处理,使用了Celery把任务放到后台执行。

Celery 是一个基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,关于它的使用方法《网易乐得RDS设计》也有提到。Celery在处理一个任务的时候,会把这个任务的进度记录在数据库中。

消息推送直接找专业的平台,例如极光。深圳市和讯华谷信息技术有限公司(极光 Aurora Mobile,纳斯达克股票代码:JG)成立于2011年,是中国领先的开发者服务提供商,专注于为开发者提供稳定高效的消息推送、一键认证以及流量变现等服务,助力开发者的运营、增长与变现。

结语:以上就是首席CTO笔记为大家整理的关于django怎么加消息列队的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于django怎么加消息列队的相关内容别忘了在本站进行查找喔。

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-23 13:41
下一篇 2023-09-23 13:41

相关推荐

发表回复

登录后才能评论