DJANGO Signal.disconnect-结果不一致(真的很奇怪)

时间:2019-03-19 16:41:01

标签: python django django-signals django-2.1

我有一个自定义信号,并且有一个classmethod更新了一些我需要断开该信号的对象,因此更改不同步到pipedrive,因为该方法仅用于Webhooks视图。

@classmethod
def backsync_all_stages(cls):
    s = sync_object.disconnect(sync_object_receiver)
    stages_json = PipeDriveWrapper.get_all_stages()
    if stages_json.get('success'):

如果请求为POST,则有一个视图调用此方法:

def post(self,request,*args,**kwargs):
    data = json.loads(request.body)
    model_alias = data['meta']['object']
    Model = PipedriveSync.WEBHOOK_MODEL_MAP[model_alias]
    if Model == LeadStage:
        PipedriveSync.backsync_all_stages()
    ...

问题在于有时它会断开信号,有时却不能。当我在shell_plus中调用PipedriveSync.backsync_all_stages()时,它可以正常工作。

但是根据视图-我在调试器中看到,在两种情况下,该方法都是从同一视图调用的。我绝对不明白发生了什么。

因此,我在disconnect命令下调用了webhook并设置了断点,因此您可以看到它返回了True和回溯。

因此调用Webhook并等待...

enter image description here

您可以清楚地看到从视图中调用了该方法,并且信号没有断开(返回False)。

与此同时,由于Webhook发送了多个请求,因此可能还有其他几篇文章。因此,我在调试器中切换到Thread-8。在那里,我看到信号已正确断开。

enter image description here

回溯是一样的,为什么要一次True而又一次False?此问题导致通过Webhook->客户端-> Webhook->客户端循环。...

我注意到每次通过shell_plus调用此方法时,信号均正确断开。

您有什么想法吗?

0 个答案:

没有答案