Giả sử rằng tôi có đối tượng threading.Lock()
mà tôi muốn có được để sử dụng tài nguyên. Giả sử tôi muốn sử dụng mệnh đề try ... except ...
với tài nguyên.Cách sử dụng tối ưu khóa bằng cách thử ... ngoại trừ trong Python 2.7?
Có một số cách để thực hiện việc này.
Phương pháp 1
import threading
lock = threading.Lock()
try:
with lock:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
Nếu một lỗi xảy ra trong quá do_stuff1()
hoặc do_stuff2()
, khóa sẽ được phát hành? Hoặc là tốt hơn để sử dụng một trong các phương pháp sau đây?
Phương pháp 2
with lock:
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
Phương pháp 3
lock.acquire():
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
finally:
lock.release()
Những phương pháp nào tốt nhất cho các khóa sẽ được phát hành ngay cả khi một lỗi xảy ra?
['try: .. except: pass'] (http://stackoverflow.com/q/21553327/1903116) rất tệ. – thefourtheye
Cá nhân tôi thích phương thức thứ nhất mà không có 'try..except' – thefourtheye
Đây là toàn bộ điểm * của' với', phần '__exit__' của trình quản lý ngữ cảnh giải phóng khóa bất cứ điều gì xảy ra. Nếu bạn muốn bắt lỗi trong những gì bạn làm với nó, 'try' sẽ là * bên trong *' with' (Phương pháp 2). – jonrsharpe