python - Python 以线程安全的方式在本地抑制警告
问题描述
我有一个多线程程序,其中一行会导致我想静音的警告。我不想让代码中其他任何地方的警告静音。
按照文档中的建议,我可以这样做:
with warnings.catch_warnings():
warnings.simplefilter("ignore")
line_that_causes_warning()
但是文档也说它不是线程安全的,因为它设置了模块级警告过滤器。
我意识到我可以用一些疯狂的方法来解决这个问题,比如用锁保护这个部分,但是有没有一种很好的方法可以使这个线程安全?
解决方案
你可以用线程接口来做到这一点。acquire()
在with块开始执行时会调用lock方法,在blockrelease()
方法退出后会被调用。
import warnings
import threading
lock_for_purpose = threading.RLock()
print(lock_for_purpose)
def fxn():
warnings.warn("deprecated", DeprecationWarning)
with lock_for_purpose:
print("lock is done")
with warnings.catch_warnings():
warnings.simplefilter("ignore")
fxn()
推荐阅读
- ruby-on-rails - Dockerize Rails:你没有写权限
- deep-learning - PyTorch 教程在训练时期使用测试数据集
- unix - 如何转换 - DOUBLE LOW-9 QUOTATION MARK „ 使用 SED 命令
- swiftui - 我们如何向手表应用程序添加启动屏幕?
- c# - 即使抛出异常,Unity 单元测试也会成功
- angular - 无法使用 ng 命令以角度添加 ng-bootstrap
- angularjs - 在Angular中触发click事件后如何防止另一个事件侦听器(mouseout)
- django - 如何最小化 django 搜索查询?
- java - Kubernetes SharedInformer 使用和定义
- node.js - 插入特定集合时的 Strapi.io 触发器