导读:今天首席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_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(替换@) 举报,一经查实,本站将立刻删除。