1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
"""Test diskcache.recipes."""
import shutil
import threading
import time
import pytest
import diskcache as dc
@pytest.fixture
def cache():
with dc.Cache() as cache:
yield cache
shutil.rmtree(cache.directory, ignore_errors=True)
def test_averager(cache):
nums = dc.Averager(cache, 'nums')
for i in range(10):
nums.add(i)
assert nums.get() == 4.5
assert nums.pop() == 4.5
for i in range(20):
nums.add(i)
assert nums.get() == 9.5
assert nums.pop() == 9.5
def test_lock(cache):
state = {'num': 0}
lock = dc.Lock(cache, 'demo')
def worker():
state['num'] += 1
with lock:
assert lock.locked()
state['num'] += 1
time.sleep(0.1)
with lock:
thread = threading.Thread(target=worker)
thread.start()
time.sleep(0.1)
assert state['num'] == 1
thread.join()
assert state['num'] == 2
def test_rlock(cache):
state = {'num': 0}
rlock = dc.RLock(cache, 'demo')
def worker():
state['num'] += 1
with rlock:
with rlock:
state['num'] += 1
time.sleep(0.1)
with rlock:
thread = threading.Thread(target=worker)
thread.start()
time.sleep(0.1)
assert state['num'] == 1
thread.join()
assert state['num'] == 2
def test_semaphore(cache):
state = {'num': 0}
semaphore = dc.BoundedSemaphore(cache, 'demo', value=3)
def worker():
state['num'] += 1
with semaphore:
state['num'] += 1
time.sleep(0.1)
semaphore.acquire()
semaphore.acquire()
with semaphore:
thread = threading.Thread(target=worker)
thread.start()
time.sleep(0.1)
assert state['num'] == 1
thread.join()
assert state['num'] == 2
semaphore.release()
semaphore.release()
def test_memoize_stampede(cache):
state = {'num': 0}
@dc.memoize_stampede(cache, 0.1)
def worker(num):
time.sleep(0.01)
state['num'] += 1
return num
start = time.time()
while (time.time() - start) < 1:
worker(100)
assert state['num'] > 0
|