【发布时间】:2020-08-04 08:14:28
【问题描述】:
我有 3 个信号函数,其中一个在被调用时陷入循环。当模型类中的对象在 Django 管理页面上更新时调用它...
# models.py
class Item(models.Model):
...
foo = models.BooleanField(
default=False,
editable=True,
blank=True,
help_text='Blah Blah...'
)
# signals.py
@receiver(pre_save, sender=Item)
def foobar(sender, instance, **kwargs):
try:
pass
except:
pass
我确实在每个try 和except 中加入了pass,并调用了一个日志,只是为了看看它是否在重复,即使没有代码也在其中,确实如此。不断地没有尽头。这也是使用if / else 语句而不是try / except 来实现的。
我怎么能阻止信号卡在循环中?它应该每次都发送一封电子邮件,但现在当对象更新时,用户会收到无限的电子邮件,直到我重新启动 Django。
我真的很茫然……
顺便说一句,这不会发生在我的测试服务器上,只会发生在我的实时/临时服务器上。
编辑:
如果您将来查看此内容,这就是我调试问题的方式。
寻找任何正在运行/命中您的服务器并可能引发signal 运行的东西。对我来说,它是一个特定的对象,被设置为sender 以运行信号,每次我使用的 webhook 都会导致一个函数运行,它正在修改特定的 sender object。
【问题讨论】:
-
你的意思是
except Exception对吗?因为除了单独发生在每个动作中。我不明白你的邮件系统是如何工作的,但你不应该单独使用 -
@LinhNguyen 让我很尴尬。我什至没有想到这一点。所以澄清一下,你是说在 try 中的每一个动作之后都会运行 except 吗?还是在尝试结束时运行?
-
我认为这个答案比我解释的更好stackoverflow.com/a/730778/11225821
-
我会检查一下@LinhNguyen,谢谢。但是,我必须提到,我的其他信号以相同的方式设置并且运行没有问题。
-
您尝试过在登台服务器上调试吗?只需将 print 添加到 try catch 案例中,看看它是否打印很多,如果没有,那么发送电子邮件功能一定有问题