मान लीजिए कि मेरे पास threading.Lock()
ऑब्जेक्ट है जिसे मैं संसाधन का उपयोग करने के लिए अधिग्रहण करना चाहता हूं। मान लीजिए कि मैं संसाधन के साथ try ... except ...
खंड का उपयोग करना चाहता हूं।कोशिश के साथ ताला का इष्टतम उपयोग क्या है ... पायथन 2.7 को छोड़कर?
ऐसा करने के कई तरीके हैं।
विधि 1
import threading
lock = threading.Lock()
try:
with lock:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
do_stuff1()
या do_stuff2()
के दौरान कोई त्रुटि होती है, तो लॉक जारी किया जाएगा? या क्या निम्न विधियों में से एक का उपयोग करना बेहतर है?
विधि 2
with lock:
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
विधि 3
lock.acquire():
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
finally:
lock.release()
जो विधि ताला लिए सबसे अच्छा है एक त्रुटि तब होती है, भले ही जारी होने की?
['कोशिश करें: .. को छोड़कर: पास'] (http://stackoverflow.com/q/21553327/1903116) बहुत खराब है। – thefourtheye
मैं व्यक्तिगत रूप से 'try..except' – thefourtheye
के बिना 1 विधि को प्राथमिकता देता हूं, यह' के साथ 'का पूरा बिंदु * है, संदर्भ प्रबंधक के' __exit__' भाग जो कुछ भी होता है उसे लॉक करता है। यदि आप इसके साथ जो कुछ भी करते हैं उसमें त्रुटियों को पकड़ना चाहते हैं, तो 'try' * के साथ 'विधि' होना चाहिए (विधि 2)। – jonrsharpe