2015-02-24 73 views
1

我知道,为了防止重复信号,有必要增加dispatch_uid(from django documentationDjango的信号默认disptch UID值

,但我注意到,有时,当我两个以上的接收器连接到相同的信号(没有uid),只有其中一个被调用。

当我试图将dispatch uid添加到其中的一个,都称为。

是什么原因?

感谢

回答

0

如果你看一看发送方法的源代码:

def send(self, sender, **named): 
    """ 
    Send signal from sender to all connected receivers. 
    If any receiver raises an error, the error propagates back through send, 
    terminating the dispatch loop, so it is quite possible to not have all 
    receivers called if a raises an error. 
    Arguments: 

     sender 
      The sender of the signal Either a specific object or None. 

     named 
      Named arguments which will be passed to receivers. 
    Returns a list of tuple pairs [(receiver, response), ... ]. 
    """ 
    responses = [] 
    if not self.receivers: 
     return responses 

    for receiver in self._live_receivers(_make_id(sender)): 
     response = receiver(signal=self, sender=sender, **named) 
     responses.append((receiver, response)) 
    return responses 

,你会发现,信号将被发送到关于是否指定了dispatch_uid或不是所有的接收器,所以我猜测你是不恰当地连接了一个接收器,或者其中一个在执行过程中产生错误。