Skip to content

Commit 71d8ef8

Browse files
committed
examples/bench: Add a new benchmark - readline server
1 parent 9fe1a65 commit 71d8ef8

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

examples/bench/rlserver.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import argparse
2+
import asyncio
3+
import gc
4+
import uvloop
5+
import os.path
6+
import socket as socket_module
7+
8+
from socket import *
9+
10+
11+
PRINT = 0
12+
13+
14+
async def echo_client_streams(reader, writer):
15+
sock = writer.get_extra_info('socket')
16+
try:
17+
sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
18+
except (OSError, NameError):
19+
pass
20+
if PRINT:
21+
print('Connection from', sock.getpeername())
22+
while True:
23+
data = await reader.readline()
24+
if not data:
25+
break
26+
writer.write(data)
27+
if PRINT:
28+
print('Connection closed')
29+
writer.close()
30+
31+
32+
async def print_debug(loop):
33+
while True:
34+
print(chr(27) + "[2J") # clear screen
35+
loop.print_debug_info()
36+
await asyncio.sleep(0.5, loop=loop)
37+
38+
39+
if __name__ == '__main__':
40+
parser = argparse.ArgumentParser()
41+
parser.add_argument('--uvloop', default=False, action='store_true')
42+
parser.add_argument('--addr', default='127.0.0.1:25000', type=str)
43+
parser.add_argument('--print', default=False, action='store_true')
44+
args = parser.parse_args()
45+
46+
if args.uvloop:
47+
loop = uvloop.new_event_loop()
48+
print('using UVLoop')
49+
else:
50+
loop = asyncio.new_event_loop()
51+
print('using asyncio loop')
52+
53+
asyncio.set_event_loop(loop)
54+
loop.set_debug(False)
55+
56+
if args.print:
57+
PRINT = 1
58+
59+
if hasattr(loop, 'print_debug_info'):
60+
loop.create_task(print_debug(loop))
61+
PRINT = 0
62+
63+
unix = False
64+
if args.addr.startswith('file:'):
65+
unix = True
66+
addr = args.addr[5:]
67+
if os.path.exists(addr):
68+
os.remove(addr)
69+
else:
70+
addr = args.addr.split(':')
71+
addr[1] = int(addr[1])
72+
addr = tuple(addr)
73+
74+
print('readline performance test')
75+
print('serving on: {}'.format(addr))
76+
77+
print('using asyncio/streams')
78+
if unix:
79+
coro = asyncio.start_unix_server(echo_client_streams,
80+
addr, loop=loop, limit=256000)
81+
else:
82+
coro = asyncio.start_server(echo_client_streams,
83+
*addr, loop=loop, limit=256000)
84+
srv = loop.run_until_complete(coro)
85+
86+
try:
87+
loop.run_forever()
88+
finally:
89+
if hasattr(loop, 'print_debug_info'):
90+
gc.collect()
91+
print(chr(27) + "[2J")
92+
loop.print_debug_info()
93+
94+
loop.close()

0 commit comments

Comments
 (0)