Cla*_*diu 7 python multithreading locking thread-safety
我的代码看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
但它有点难看.大量的获取和发布.这看起来更漂亮:
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
Run Code Online (Sandbox Code Playgroud)
但这会使锁定的时间长于严格必要的时间,特别是如果self.logger.error
需要一段时间(就像它写入磁盘一样).是否有尽可能少的锁定之间的中间地带,但有更漂亮的代码?
也许你需要将这个逻辑分开:
def initSearch(self):
with self.searchingLock:
if self.searching : raise SearchingError('AlreadySearching')
self.searching = True
def startSearching(self):
try: self.initSearch()
except SearchingError as error :
self.logger.error(error.message)
return False
#some more init code, then start the thread which
#constantly checks self.searching to determine when to stop
Run Code Online (Sandbox Code Playgroud)
另外你告诉你searchingLock
自动释放它的原因.
归档时间: |
|
查看次数: |
3045 次 |
最近记录: |