मेरे पास ऐसा कोड है जो इस तरह कुछ दिखता है:पायथन: एक चर पर ताला के साथ सौदा करने के लिए सुरुचिपूर्ण तरीका?
def startSearching(self):
self.searchingLock.acquire()
searching = self.searching
if self.searching:
self.searchingLock.release()
self.logger.error("Already searching!")
return False
self.searching = True
self.searchingLock.release()
#some more init code, then start the thread which
#constantly checks self.searching to determine when to stop
हालांकि यह बदसूरत है। बहुत सारे अधिग्रहण और रिलीज। यह सुंदर दिखता है:
def startSearching(self):
with self.searchingLock:
if self.searching:
self.logger.error("Already searching!")
return False
self.searching = True
#some more init code, then start the thread which
#constantly checks self.searching to determine when to stop
लेकिन यह लॉक को सख्ती से जरूरी से अधिक रखता है, espcially अगर self.logger.error
थोड़ी देर लेता है (जैसे कि यह डिस्क पर लिखता है, जो यह करता है)। लॉक को जितना संभव हो उतना छोटा पकड़ने के बीच कोई मध्य ग्राउंड है लेकिन सुंदर कोड है?
हेएच चालाक =) मुझे यह पसंद है – Claudiu
आप पहले 4 लाइनों को किसी अन्य फ़ंक्शन में आसानी से तोड़ सकते हैं। – user37078