Examples of aiothrift usage¶
aio thrift server¶
import asyncio
import thriftpy
from aiothrift.server import create_server
pingpong_thrift = thriftpy.load('pingpong.thrift', module_name='pingpong_thrift')
class Dispatcher:
def ping(self):
return "pong"
async def add(self, a, b):
await asyncio.sleep(2)
return a + b
loop = asyncio.get_event_loop()
server = loop.run_until_complete(
create_server(pingpong_thrift.PingPong, Dispatcher(), ('127.0.0.1', 6000), loop=loop, timeout=10))
print('server is listening on host {} and port {}'.format('127.0.0.1', 6000))
try:
loop.run_forever()
except KeyboardInterrupt:
pass
server.close()
loop.run_until_complete(server.wait_closed())
loop.close()
aio thrift client¶
import thriftpy
import asyncio
import aiothrift
pingpong_thrift = thriftpy.load('pingpong.thrift', module_name='pingpong_thrift')
loop = asyncio.get_event_loop()
async def create_connection():
conn = await aiothrift.create_connection(pingpong_thrift.PingPong, ('127.0.0.1', 6000), loop=loop, timeout=10)
print(await conn.ping())
print(await conn.add(5, 6))
conn.close()
loop.run_until_complete(create_connection())
loop.close()
connection pool sample¶
import thriftpy
import aiothrift
import asyncio
pingpong_thrift = thriftpy.load('pingpong.thrift', module_name='pingpong_thrift')
async def create_pool():
return await aiothrift.create_pool(pingpong_thrift.PingPong, ('127.0.0.1', 6000), loop=loop, timeout=1)
async def run_pool(pool):
try:
async with pool.get() as conn:
print(await conn.add(5, 6))
print(await conn.ping())
except asyncio.TimeoutError:
pass
async with pool.get() as conn:
print(await conn.ping())
loop = asyncio.get_event_loop()
pool = loop.run_until_complete(create_pool())
tasks = []
for i in range(10):
tasks.append(asyncio.ensure_future(run_pool(pool)))
loop.run_until_complete(asyncio.gather(*tasks))
pool.close()
loop.run_until_complete(pool.wait_closed())
loop.close()