Skip to main content

a rpc framework for message-pack rpc.

Project description

 pymprpc ===============================

Desc

a rpc framework for message-pack rpc.

keywords:rpc,server,tcp

Feature

  • api seems to stdlib xmlrpc

  • easy to use, easy to debug

  • support stream response

Example

server

import platform
from pymprpc.server import SimpleMprpcServer
if platform.system() == "Windows":
    try:
        import aio_windows_patch as asyncio
    except:
        import warnings
        warnings.warn(
            "you should install aio_windows_patch to support windows",
            RuntimeWarning,
            stacklevel=3)
        import asyncio

else:
    import asyncio
try:
    import uvloop
    asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
except ImportError:
    pass


class MyMPRPCServer(SimpleMprpcServer):
    pass


with MyMPRPCServer(("127.0.0.1", 5000), debug=True) as server:
    server.register_introspection_functions()

    @server.register_function()
    def testfunc(a, b):
        '''有help'''
        return a + b

    @server.register_function()
    async def testcoro(a, b):
        await asyncio.sleep(0.1)
        return a + b

    @server.register_function()
    async def testcorogen(a, b):
        for i in range(10):
            await asyncio.sleep(0.1)
            yield i + a + b

    class TestClass:

        def testclassmethod(self, a, b):
            return a + b

        async def testclasscoro(self, a, b):
            await asyncio.sleep(0.1)
            return a + b

        async def testclasscorogen(self, a, b):
            for i in range(10):
                await asyncio.sleep(0.1)
                yield i + a + b
    t = TestClass()
    server.register_instance(t)
    server.run_forever()

sync client

import time
from pymprpc.client import RPC

with RPC(addr="tcp://admin:admin@127.0.0.1:5000",
        debug=True) as rpc:
    print(rpc.system.listMethods())
    print(rpc.system.methodSignature("testclassmethod"))
    print(rpc.system.methodHelp("testfunc"))
    print(rpc.system.lenConnections())
    print(rpc.system.lenUndoneTasks())
    print(rpc.testclassmethod(1, 2))
    print(rpc.testclasscoro(2, 3))
    print(rpc.testcoro(5, 6))
    print(rpc.testfunc(5, 4))
    agen = rpc.testcorogen(1, 2)
    for i in agen:
        print(i)
    time.sleep(200)
    print("wait done")
    # rpc.close()
    print(rpc.testfunc())

async client

import asyncio
from pymprpc.client import AsyncRPC


async def main(loop):
    async with AsyncRPC(
            addr="tcp://admin:admin@127.0.0.1:5000",
            loop=loop,
            debug=True) as rpc:
        print(await rpc.system.listMethods())
        print(await rpc.system.methodSignature("testclassmethod"))
        print(await rpc.system.methodHelp("testfunc"))
        print(await rpc.system.lenConnections())
        print(await rpc.system.lenUndoneTasks())
        print(await rpc.testclassmethod(1, 2))
        print(await rpc.testclasscoro(2, 3))
        print(await rpc.testcoro(5, 6))
        print(await rpc.testfunc(5, 4))
        # await asyncio.sleep(200)
        print("wait done")
        print(await rpc.testfunc())
    print("end")
loop = asyncio.get_event_loop()
try:
    loop.run_until_complete(main(loop))
except Exception as e:
    raise e

Install

  • python -m pip install pymprpc

Documentation

Documentation on Readthedocs.

TODO

  • Load balancing broker

Limitations

  • sync client do not support heartbeat and timeout

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pymprpc-0.0.3.tar.gz (22.4 kB view details)

Uploaded Source

Built Distribution

pymprpc-0.0.3-py3-none-any.whl (33.3 kB view details)

Uploaded Python 3

File details

Details for the file pymprpc-0.0.3.tar.gz.

File metadata

  • Download URL: pymprpc-0.0.3.tar.gz
  • Upload date:
  • Size: 22.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pymprpc-0.0.3.tar.gz
Algorithm Hash digest
SHA256 00eac8096b21d7b3afa20e986feb5912e5062d2ff5a2b77292493723eebe8296
MD5 6beb4103764d353a19846431137eb632
BLAKE2b-256 0eddcd336501b20a6dd011967c2a88e6993542e66b49013bb05b606fd0f6f7c1

See more details on using hashes here.

File details

Details for the file pymprpc-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for pymprpc-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9ae941391d1ae87be04f1a9b010d9c02284f53e48e3543d0b58df4d639e1de84
MD5 915eb1cbb8ef594ee9f3d777895b2229
BLAKE2b-256 af444c4fd709abef6038b48e63c622f973ba374328959e7aa6562ee1f4a6a125

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page