Django Signals.py。如何组合接收器';并在新线程中启动函数

Django Signals.py。如何组合接收器';并在新线程中启动函数,django,frameworks,signals,backend,receiver,Django,Frameworks,Signals,Backend,Receiver,这是组合signals.py中的Django接收器并在新线程中启动函数的最佳方法 post_删除和post_保存示例: from django.db.models.signals import post_delete, post_save from django.dispatch import receiver @receiver(post_delete, sender=Application) def test_delete_function(sender, instance, **kw

这是组合signals.py中的Django接收器并在新线程中启动函数的最佳方法

post_删除和post_保存示例:

from django.db.models.signals import post_delete, post_save
from django.dispatch import receiver

@receiver(post_delete, sender=Application)

def test_delete_function(sender, instance,  **kwargs):
    if isinstance(instance, Application):
          deletefunc()


@receiver(post_save, sender=Application)

def test_save_function(sender, instance, **kwargs):
    if isinstance(instance, Application):
          savefunc()
所以, Q1:这是一种表达不同接收器类型的好方法吗?@receiver,然后是函数

Q2:当使用POST从fronend保存应用程序时,测试保存功能在同一线程中启动。如何在不同的线程上运行test_save_函数? -我希望Django框架能够处理这个问题,但似乎我需要额外的配置


谢谢

我不知道为什么您会期望信号处理程序在不同的线程中运行。Python对多线程的支持非常有限,因此如果您想在带外执行长或重的函数,您需要一些异步任务队列(芹菜、休伊等)。wrt/Q1:是的,在这里使用这种方法是正确的,但我们通常不会在两者之间加一个空行。但是如果
应用程序是您自己的模型,线程:这里的问题是后端-在我们的例子中,“test\u save\u函数”在启动前等待POST完成(同样,如果POST失败,“test\u save\u函数”也会)。我在寻找一种启动POST的方法,比如说5秒钟,同时运行“test_save_function”,不管POST是否完成。相反方向的另一件奇怪的事情是:若“test_save_function”需要2分钟,它也会处理POST请求。当我发布例子时,中间的空白行只是语法错误。应用程序是我自己的模型是的,我真的建议你遵循我已经发布的链接-它应该为你澄清很多事情。TL;DR:信号不是异步的,它们唯一的目标是为其他应用程序提供挂钩。如果您想要带外操作,请使用异步任务队列。感谢Bruno,它将检查队列