zal*_*ale 5 python multithreading
我有一个多线程程序,其中一行导致我想静音的警告。我不想让代码中其他任何地方的警告静音。
我可以按照文档中的建议执行此操作:
with warnings.catch_warnings():
warnings.simplefilter("ignore")
line_that_causes_warning()
Run Code Online (Sandbox Code Playgroud)
但是文档也说它不是线程安全的,因为它设置了模块级警告过滤器。
我意识到我可以用一些疯狂的方法来解决这个问题,比如用锁保护这个部分,但是有没有一个很好的方法来使这个线程安全?
您可以使用线程接口来做到这一点。Lockacquire()方法会在with块开始执行时调用,block方法退出后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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |