Jul*_*nck 8 python locking python-multithreading
假设我有一个threading.Lock()我想要获取的对象以便使用资源.假设我想try ... except ...在资源中使用一个子句.
有几种方法可以做到这一点.
方法1
import threading
lock = threading.Lock()
try:
with lock:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
Run Code Online (Sandbox Code Playgroud)
如果在do_stuff1()或期间发生错误do_stuff2(),是否会释放锁定?或者使用以下方法之一是否更好?
方法2
with lock:
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
Run Code Online (Sandbox Code Playgroud)
方法3
lock.acquire():
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
finally:
lock.release()
Run Code Online (Sandbox Code Playgroud)
即使发生错误,哪种方法最适合释放锁?
该with "上下文管理器"要求的__exit__方法,在这种情况下可以保证,无论发生什么事,该lock是released.
如果你想处理期间不管它是什么,你有这样做发生的异常lock,你应该把try 内部的with块,即方法2是正确的做法.通常,您应始终致力于最小化try块内的代码量.
你应该尽可能具体地说明可能出现的问题; 裸露except:是不好的做法(参见例如"邪恶的except").在最起码(即使是一个简单的例子!),你应该使用except Exception:.
| 归档时间: |
|
| 查看次数: |
1559 次 |
| 最近记录: |