Multi-process and gevent loop friendly lock
This commit is contained in:
parent
b7c6b84826
commit
66a1c4d242
2 changed files with 67 additions and 1 deletions
|
@ -1,3 +1,5 @@
|
|||
import time
|
||||
|
||||
import gevent
|
||||
|
||||
from util import ThreadPool
|
||||
|
@ -27,3 +29,47 @@ class TestThreadPool:
|
|||
|
||||
res = blocker()
|
||||
assert res == 10000000
|
||||
|
||||
def testLockBlockingSameThread(self):
|
||||
from gevent.lock import Semaphore
|
||||
|
||||
lock = Semaphore()
|
||||
|
||||
s = time.time()
|
||||
|
||||
def unlocker():
|
||||
time.sleep(1)
|
||||
lock.release()
|
||||
|
||||
gevent.spawn(unlocker)
|
||||
lock.acquire(True)
|
||||
lock.acquire(True, timeout=2)
|
||||
|
||||
unlock_taken = time.time() - s
|
||||
|
||||
assert 1.0 < unlock_taken < 1.5
|
||||
|
||||
def testLockBlockingDifferentThread(self):
|
||||
lock = ThreadPool.Lock()
|
||||
|
||||
s = time.time()
|
||||
|
||||
def locker():
|
||||
lock.acquire(True)
|
||||
time.sleep(1)
|
||||
lock.release()
|
||||
|
||||
pool = gevent.threadpool.ThreadPool(10)
|
||||
pool.spawn(locker)
|
||||
threads = [
|
||||
pool.spawn(locker),
|
||||
]
|
||||
time.sleep(0.1)
|
||||
|
||||
lock.acquire(True, 5.0)
|
||||
|
||||
unlock_taken = time.time() - s
|
||||
|
||||
assert 2.0 < unlock_taken < 2.5
|
||||
|
||||
gevent.joinall(threads)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue