首页 > 解决方案 > Django信号-同一模型上的多个请求?

问题描述

我正在使用pre_save信号来存储对特定实例执行最后一次操作的用户。

为此,我使用了一个中间件。在它的process_request函数中,将信号注册到相应的函数中,set_user如下图所示。

mark_who_did = curry(self.set_user, user)
models.signals.pre_save.connect(
      mark_who_did,
      dispatch_uid=(self.__class__, request,),
      weak=False
)

然后,我在process_response中间件的功能中断开了这个信号。

models.signals.pre_save.disconnect(dispatch_uid=(self.__class__, request,))

当不涉及并发时,这可以正常工作。但是,假设我们有 3 个并发请求 -对于每个用户请求组合,信号连接 3 次,set_user方法调用9 次。

根据我的理解,每个请求都应该独立运行,但显然不是这样。有什么我遗漏的东西,或者我可以在我的代码中改变什么来解决这个问题吗?

标签: pythondjangodjango-rest-frameworkdjango-signalsdjango-middleware

解决方案


推荐阅读