python-3.x – python lock with-statement和timeout
发布时间:2020-12-16 23:43:59 所属栏目:Python 来源:网络整理
导读:我正在使用这样的 Python 3序列: lock = threading.Lock()res = lock.acquire(timeout=10)if res: # do something .... lock.release()else: # do something else ... 我更喜欢使用with语句而不是显式的“获
我正在使用这样的
Python 3序列:
lock = threading.Lock() res = lock.acquire(timeout=10) if res: # do something .... lock.release() else: # do something else ... 我更喜欢使用with语句而不是显式的“获取”和“释放”,但我不知道如何获得超时效果. 解决方法
您可以使用上下文管理器轻松完成此操作:
import threading from contextlib import contextmanager @contextmanager def acquire_timeout(lock,timeout): result = lock.acquire(timeout=timeout) yield result if result: lock.release() # Usage: lock = threading.Lock() with acquire_timeout(lock,2) as acquired: if acquired: print('got the lock') # do something .... else: print('timeout: lock not available') # do something else ... *注意:这在Python 2.x中不起作用,因为Lock.acquire没有超时参数 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |