django异步处理(如何正确使用 Signal)

:暂无数据 2026-09-08 00:50:01 0

django异步处理(如何正确使用 Signal)

本篇文章给大家谈谈django异步处理,以及如何正确使用 Signal对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录

如何正确使用 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中celery的worker,同时只能执行一个任务吗同时

你可以考虑使用eventlet 库在worker中做异步的操作,这样就可以多个任务同时执行了。下面是一个使用的例子
import eventlet
eventlet.monkey_patch() # must execute as early as possible
...
# everything is non-blocking now:
import requests, amqp, memcache, paramiko, redis

django中异步任务除了celery还有什么

轻量级的异步任务,例如简单的定时任务可以用apscheduler或linux本身的crontab实现
重量级的异步任务还是选用Celery+Redis最合适。

文章分享结束,django异步处理和如何正确使用 Signal的答案你都知道了吗?欢迎再次光临本站哦!

django异步处理(如何正确使用 Signal)

本文编辑:admin

更多文章:


php如何单步调试?调试php网站程序在本地怎么调试

php如何单步调试?调试php网站程序在本地怎么调试

大家好,今天小编来为大家解答以下的问题,关于php调试,php如何单步调试这个很多人还不知道,现在让我们一起来看看吧!

2026年9月8日 01:00

django异步处理(如何正确使用 Signal)

django异步处理(如何正确使用 Signal)

本篇文章给大家谈谈django异步处理,以及如何正确使用 Signal对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月8日 00:50

函数图像的概念初中(什么是函数图像)

函数图像的概念初中(什么是函数图像)

各位老铁们好,相信很多人对函数图像的概念初中都不是特别的了解,因此呢,今天就来为大家分享下关于函数图像的概念初中以及什么是函数图像的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 22:30

blast premier春季赛(csgo战队vitality有谁)

blast premier春季赛(csgo战队vitality有谁)

“blast premier春季赛”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看blast premier春季赛(csgo战队vitality有谁)!

2026年9月7日 21:50

send out用法及例句(send out是什么意思)

send out用法及例句(send out是什么意思)

各位老铁们好,相信很多人对send out用法及例句都不是特别的了解,因此呢,今天就来为大家分享下关于send out用法及例句以及send out是什么意思的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 20:30

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)

大家好,关于全球新冠肺炎疫情背景下航运发展很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决

2026年9月7日 17:10

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)

大家好,关于matlab求解带字母参数方程组很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数的知识点,相信应该可以解决大家的一些困惑和问题,

2026年9月7日 16:30

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)

本篇文章给大家谈谈oracle中的循环语句,以及下面哪个不是oracle程序设计中的循环语句 a for对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月7日 15:30

多表查询怎么做(Excel技巧:如何多表同步筛选)

多表查询怎么做(Excel技巧:如何多表同步筛选)

各位老铁们好,相信很多人对多表查询怎么做都不是特别的了解,因此呢,今天就来为大家分享下关于多表查询怎么做以及Excel技巧:如何多表同步筛选的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年9月7日 15:10

服装店网站网页设计(服装网站建设目标设计要看甲方)

服装店网站网页设计(服装网站建设目标设计要看甲方)

“服装店网站网页设计”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看服装店网站网页设计(服装网站建设目标设计要看甲方)!

2026年9月7日 14:10

最近更新

django异步处理(如何正确使用 Signal)
2026-09-08 00:50:01 浏览:0
热门文章

dessert(dessert是什么意思)
2026-05-03 12:45:03 浏览:7
标签列表