rap(par[::-1]) is advanced and fast python async rpc
Project description
rap
rap(par[::-1]) is advanced and fast python async rpc
Inspired by the sky aiorpc
Installation
pip install rap
Usage
Server
import asyncio
from rap.server import Server
def sync_sum(a: int, b: int):
return a + b
async def mock_io(a: int, b: int):
await asyncio.sleep(1) # mock io time
return a + b
async def async_gen(a):
for i in range(a):
yield i
loop = asyncio.new_event_loop()
rpc_server = Server()
rpc_server.register(sync_sum)
rpc_server.register(mock_io)
rpc_server.register(async_gen)
server = loop.run_until_complete(rpc_server.create_server())
try:
loop.run_forever()
except KeyboardInterrupt:
server.close()
loop.run_until_complete(server.wait_closed())
Client
For the client, there is no difference between async def
and def
. In fact, rap
is still called by the method of call_by_text
. Using async def
can be decorated by client.register
and can also be written with the help of IDE Correct code
import asyncio
from rap.client import Client
client = Client()
def sync_sum(a: int, b: int) -> int:
pass
# in register, must use async def...
@client.register
async def mock_io(a: int, b: int) -> int:
pass
# in register, must use async def...
@client.register
async def async_gen(a: int):
yield
async def main():
await client.connect()
print(f"sync result: {await client.call(sync_sum, 1, 2)}")
print(f"sync result: {await client.raw_call('sync_sum', 1, 2)}")
print(f"async result: {await mock_io(1, 3)}")
async for i in async_gen(10):
print(f"async gen result:{i}")
await client.wait_close()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
rap-0.5.3.1.tar.gz
(23.3 kB
view hashes)
Built Distribution
rap-0.5.3.1-py3-none-any.whl
(31.6 kB
view hashes)