Я работаю с нулем на пару месяцев, и я чувствую, что нуль имеет потенциал, чтобы изменить разницу в написании микросервисов. Вместо того, чтобы думать о техническом кодировании кодиров и отдыха, вы можете сосредоточиться на том, чтобы сделать вещи, написание бизнес-логики – это цель нуля.
Давайте посмотрим на простой пример –
Установите его в первую очередь
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”