n61*_*007 4 python multithreading asynchronous locking nonblocking
在Java中,tryLock(很长时间,TimeUnit单位)可以用作获取锁的非阻塞尝试。如何实现python中的等效功能?(Pythonic | 惯用方式是首选!)
Java tryLock:
ReentrantLock lock1 = new ReentrantLock()
if (lock1.tryLock(13, TimeUnit.SECONDS)) { ... }
Run Code Online (Sandbox Code Playgroud)
Python锁:
import threading
lock = Lock()
lock.acquire() # how to lock.acquire(timeout = 13) ?
Run Code Online (Sandbox Code Playgroud)
可以使用模块的“ try lock ”行为(请参见Python doc):threadingLock.acquire(False)
import threading
import time
my_lock = threading.Lock()
successfully_acquired = my_lock.acquire(False)
if successfully_acquired:
try:
print "Successfully locked, do something"
time.sleep(1)
finally:
my_lock.release()
else:
print "already locked, exit"
Run Code Online (Sandbox Code Playgroud)
我找不到with在这里使用的令人满意的方法。
哎呀,我的错!我应该先阅读Locks 的python参考资料!
Lock.acquire([阻塞])
当调用阻塞参数设置为时
False,不阻塞。如果设置为阻塞的调用True会阻塞,则False立即返回;否则,将锁设置为锁定并返回True。
所以我可以做这样的事情(或者甚至更高级的事情:P):
import threading
import time
def my_trylock(lock, timeout):
count = 0
success = False
while count < timeout and not success:
success = lock.acquire(False)
if success:
break
count = count + 1
time.sleep(1) # should be a better way to do this
return success
lock = threading.Lock()
my_trylock(lock, 13)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2179 次 |
| 最近记录: |