-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathasdhash.py
62 lines (51 loc) · 1.42 KB
/
asdhash.py
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
import asyncio
import time
import random
import string
class ASyncDHash(object):
def __init__(self):
self.nodes = [ASyncNodes('#1'), ASyncNodes('#2')]
async def read(self, key):
if key % 2 == 0:
await self.nodes[0].read(key)
else:
await self.nodes[1].read(key)
async def write(self, key, value):
if key % 2 == 0:
await self.nodes[0].write(key, value)
else:
await self.nodes[1].write(key, value)
class ASyncNodes(object):
def __init__(self, name):
self.name = name
self.storage = {}
async def read(self, key):
await asyncio.sleep(1)
if key in self.storage:
print('Read ', self.storage[key], 'with key of ', key)
return self.storage[key]
else:
print('Nothing read for key of ', key)
async def write(self, key, value):
await asyncio.sleep(2)
print('Wrote ', value, 'with key of ', key)
self.storage[key] = value
async def random_gen(dhash):
while True:
key = random.randint(0,10)
value = ''.join([random.choice(string.ascii_letters) for _ in range(10)])
if random.choice([0,1]):
await dhash.read(key)
else:
await dhash.write(key, value)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
dhash = ASyncDHash()
tasks = [
loop.create_task(random_gen(dhash)),
loop.create_task(random_gen(dhash)),
loop.create_task(random_gen(dhash)),
loop.create_task(random_gen(dhash)),
loop.create_task(random_gen(dhash))
]
loop.run_until_complete(asyncio.gather(*tasks))