我有一个自定义信号,并且有一个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并等待...
您可以清楚地看到从视图中调用了该方法,并且信号没有断开(返回False
)。
与此同时,由于Webhook发送了多个请求,因此可能还有其他几篇文章。因此,我在调试器中切换到Thread-8
。在那里,我看到信号已正确断开。
回溯是一样的,为什么要一次True
而又一次False
?此问题导致通过Webhook->客户端-> Webhook->客户端循环。...
我注意到每次通过shell_plus
调用此方法时,信号均正确断开。
您有什么想法吗?