Рубрики
Без рубрики

Нуль: Быстрый и высокопроизводительный Python RPC, как Framework, чтобы сделать микросервисы

Я работал с нулем на пару месяцев, и я чувствую, что нулевой может сделать потенциал … Tagged Python, Microsevices, WebDev, Opensource.

Я работаю с нулем на пару месяцев, и я чувствую, что нуль имеет потенциал, чтобы изменить разницу в написании микросервисов. Вместо того, чтобы думать о техническом кодировании кодиров и отдыха, вы можете сосредоточиться на том, чтобы сделать вещи, написание бизнес-логики – это цель нуля.

Давайте посмотрим на простой пример –

Установите его в первую очередь

pip install zeroapi

server.py

from zero import ZeroServer

def echo(msg: str) -> str:
    return msg

async def hello_world() -> str:
    return "hello world"

if __name__ == "__main__":
    app = ZeroServer(port=5559)
    app.register_rpc(echo)
    app.register_rpc(hello_world)
    app.run()

Это оно! Zeroserver Использует ядра CPU В отличие от других программ Python.

Если вы сохраните Run python3 server.py Это запускает несколько процессов и распределяет задачи среди них.

Итак, вы регистрируете функцию здесь и верну что-нибудь. Так что это работает как RPC. Основное отличие rpc – это – функции могут принимать только один параметр, который мы называем сообщение Короче Msg . Есть несколько типов, которые мы поддерживаем сейчас – большинство основных типов, таких как Int, Float, Str, Bool, List, Dict, Tuple, Set. И некоторые типы печатания печатания. Список, набрав. Кортеж, печатать. Диктовать, печатать. Союз, набрав. По желанию. У нас есть план поддержки Pydantic 🙌

Теперь давайте сделаем клиент для сервера –

from zero import ZeroClient

zero_client = ZeroClient("localhost", 5559)

def echo():
    resp = zero_client.call("echo", "Hi there!")
    print(resp)

def hello():
    resp = zero_client.call("hello_world", None)
    print(resp)

if __name__ == "__main__":
    echo()
    hello()

Простой и обычный. Вам нужна производительность? Мы также поддерживаем async 😃.

import asyncio

from zero import AsyncZeroClient

zero_client = AsyncZeroClient("localhost", 5559)

async def echo():
    resp = await zero_client.call("echo", "Hi there!")
    print(resp)

async def hello():
    resp = await zero_client.call("hello_world", None)
    print(resp)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(echo())
    loop.run_until_complete(hello())

Бегите и играйте с этим.

Если вам нужно отправить два, три … N параметров. Вы можете просто обернуть в списке, отправлять и развернуть список на сервере. Нравится –

server.py

def pythagoras(msg: typing.Tuple[int, int]) -> int:
    a, b = msg
    return a**2 + b**2

client.py

def get_pythagoras(a: int, b:int) -> int:
    return zero_server.call("pythagoras", (4, 5))

Таким образом, вы можете отправить произвольное количество аргументов, как это.

Вы ленивы, как я? Ноль также генерирует код клиента! 🙌.

Если вы запустите –

python -m zero.generate_client --host localhost --port 5559 --overwrite-dir ./my_client

Это будет генерировать код клиента для вас, как это –

import typing  # remove this if not needed
from typing import List, Dict, Union, Optional, Tuple  # remove this if not needed
from zero import ZeroClient


zero_client = ZeroClient("localhost", 5559)


class RpcClient:
    def __init__(self, zero_client: ZeroClient):
        self._zero_client = zero_client

    def echo(self, msg: str) -> str:
        return self._zero_client.call("echo", msg)

    def hello_world(self, msg: str) -> str:
        return self._zero_client.call("hello_world", msg)

И вы можете использовать так –

from my_client import RpcClient, zero_client

client = RpcClient(zero_client)

if __name__ == "__main__":
    client.echo("Hi there!")
    client.hello_world(None)

Так что попробуйте ноль и дайте мне знать 📩 Оформить заказ примеров здесь – https://github.com/ananto30/zero/tree/main/examples.

Если вам нравится ноль, пожалуйста, оставьте звезду на GitHub: https://github.com/ananto30/zero.

И давайте поговорим больше в комментариях 👇

Оригинал: “https://dev.to/ananto30/zero-a-fast-and-high-performance-python-rpc-like-framework-to-make-microservices-6f0”