- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我断开连接然后在单线程上下文中连接一些信号会影响其他线程使用的信号池吗?
更新
我会尽量说得更具体一些。
我正在为少数发件人使用 post_save 和 pre_delete 信号,这些信号触发特定模型(一个特定模型)的全文引擎重新索引,这是全文引擎的主要内容来源。
重新索引是通过 Celery 任务完成的,信号处理程序只是将重新索引任务分派(dispatch)给代理(在我的例子中是 Redis)。
一些 post_save 信号不应触发重新索引(即 - 不应调度 Celery 任务,pre_delete 应始终触发重新索引),因为某些模型更改与全文引擎内容无关(即状态更改、时间戳更改等)。我不太能够在每种情况下验证处理程序 kwargs 中的 update_fields,因为根据我的观察,管理站点保存操作没有指定这些。
我正在使用自定义上下文管理器,它将重新索引处理程序与特定发件人的 post_save 信号断开连接,将控制权交还给调用一段代码,然后执行对模型的保存操作,当控制权传递回上下文管理器时,所有重新索引处理程序都在执行重新连接到特定发件人的 post_save 信号。
我想确保在单线程上下文中执行的上下文管理器中的断开/连接例程不会影响其他线程(即 - 在单线程上下文中断开的所有信号仍将在其他线程中连接)。
谢谢!
无名小卒
最佳答案
如果您的代码如下所示:
@contextmanager
def disable_signal():
try:
post_save.disconnect(your_signal)
yield None
finally:
post_save.connect(your_signal)
这不是线程安全的,因为我们正在更改全局变量。
Note also that being reentrant is not the same thing as being thread safe. redirect_stdout(), for example, is definitely not thread safe, as it makes a global modification to the system state by binding sys.stdout to a different stream.
关于django - Django 信号线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20907631/
我正在尝试在由我的 Windows 应用程序控制的串行端口上设置载波检测(接收线路信号检测)引脚。我已经能够使用此函数将 RTS 线路设置为高电平: EscapeCommFunction(handle
我是一名优秀的程序员,十分优秀!