python-3.x – python lock with-statement和timeout

前端之家收集整理的这篇文章主要介绍了python-3.x – python lock with-statement和timeout前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用这样的 Python 3序列:
  1. lock = threading.Lock()
  2. res = lock.acquire(timeout=10)
  3. if res:
  4. # do something ....
  5. lock.release()
  6. else:
  7. # do something else ...

我更喜欢使用with语句而不是显式的“获取”和“释放”,但我不知道如何获得超时效果.

解决方法

您可以使用上下文管理器轻松完成此操作:
  1. import threading
  2. from contextlib import contextmanager
  3.  
  4. @contextmanager
  5. def acquire_timeout(lock,timeout):
  6. result = lock.acquire(timeout=timeout)
  7. yield result
  8. if result:
  9. lock.release()
  10.  
  11.  
  12. # Usage:
  13. lock = threading.Lock()
  14.  
  15. with acquire_timeout(lock,2) as acquired:
  16. if acquired:
  17. print('got the lock')
  18. # do something ....
  19. else:
  20. print('timeout: lock not available')
  21. # do something else ...

*注意:这在Python 2.x中不起作用,因为Lock.acquire没有超时参数

猜你在找的Python相关文章