我有一行的多线程程序,该行会引起我要静音的警告。我不想使代码中其他任何地方的警告保持沉默。
我可以按照in the docs的建议执行此操作:
with warnings.catch_warnings():
warnings.simplefilter("ignore")
line_that_causes_warning()
但是文档也说it's not thread-safe,因为它设置了模块级警告过滤器。
我意识到我可以用一些疯狂的方法来解决该问题,例如用锁保护该部分,但是有没有一种很好的方法来使该线程安全?
最佳答案
您可以使用线程接口(interface)来实现。在开始执行with块时,将调用锁定acquire()
方法,而在退出该块之后,将调用release()
方法。
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()
关于Python以线程安全的方式在本地抑制警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56043644/