Giter Site home page Giter Site logo

aeron-python's Introduction

Python

aeron-python

Build Python CPython Linux Code style: black

Неофициальное расширение для Python, позволяющее использовать протокол Aeron.

Установка

Предварительные требования

Перед установкой и использованием данного расширения, у вас должен быть установлен Aeron. Вы можете воспользоваться статьёй в Wiki для его установки.

Сборка и установка расширения

pip install --upgrade "aeron @ git+ssh://[email protected]/RoboTradeCode/aeron-python.git"

В примере выше используется подключение с помощью SSH. Подробнее о нём вы можете прочитать в руководстве "Connecting to GitHub with SSH"

Использование

Отправка сообщений

from aeron import Publisher

publisher = Publisher(
    channel="aeron:udp?endpoint=localhost:20121",  # str
    stream_id=1001,  # int
)

result = publisher.offer(message="Hello, World!")
publisher.close()

Получение сообщений

from aeron import Subscriber
from time import sleep


def handler(message: str) -> None:
    print(f"<<{message}>>")


subscriber = Subscriber(
    handler=handler,  # Callable[[str], None]
    channel="aeron:udp?endpoint=localhost:20121",  # str
    stream_id=1001,  # int
)

sleep(1)
fragments_read = subscriber.poll()
subscriber.close()

Убедитесь, что у вас запущен медиа-драйвер Aeron перед использованием классов расширения

aeron-python's People

Contributors

81xx avatar

aeron-python's Issues

Документация Aeron

Ранее в аналогичном issue я имел ввиду следующее:
У нас есть своя, достаточно, подробная документация по aeron, в проекте aeron-cpp. Так вот, надо сделать так, что бы в проектах aeron-python и agent были ссылки не только на официальный репозиторий aeron, а еще и ссылки на нашу документацию, я имею ввиду википедию.
Суть такая, когда мы даем человеку проект aeron-python или agent у него должны быть все ссылку на хорошую документацию, что бы он быстрее понял что такое aeron.
По этому, попробую еще раз написать что нужо сделать:

  • в документации aeron-python добавить абзац из двух трех предложений с описанием протокола aeron. И далее ссылку на нашу вики
  • в документации agent добавить абзац из двух трех предложений с описанием протокола aeron. И далее ссылку на нашу вики
  • В обоих проектах заменить ссылки которые ведут на официальный репозиторий, на ссылки ведущие в наш репозиторий
  • Добавить описание параметров, используемых в расширении

Доработка доков

"Сборка медиа-драйвера aeron"

  • Добавить информацию как понять и проверить что драйвер запустился. Возможно стоит приложить какую-то утилиту которая проверить, работает он или нет, и просто выведет что-то в консоль.

Установка

При установке у меня появилась вот такая ошибка:

image

хотя все работает.

  • Надо понять в чем проблема это ошибки, или хотя бы, временно, описать про нее в доках.

Эксплуатация

Запустил в дебаге вот такой код, медиа драйвер был отключен:
image
Все зависло.

  • Вообщем тут проблема в том, что правильно что бы конструктор кинул исключение так как драйвер не был запущен.

Комменты

Вот тут совсем нет комментов:

image

Именованные

image

  • Добавить поддержку именованных аргументов в конструкторе
  • Описать что за значение возвращают методы offer и pol
  • Расписать более подробно зачем нужны части сообщений, где у тебя число 10 стоит, или, лучше, сделать ссылку на официальный репозиторий.

Разное

  • В доках к python-php8 отметить про какую-то проблему с той ситуацией когда установлено и php8 и более ранняя версия.

Описать зависимости aeron-python

Не хватает списка зависимостей для aeron-python и для самого aeron. Когда устанавливал его на сервер, пришлось разбираться в ошибках и устанавливать нехватающие пакеты:

  • cmake
  • libbsd-dev
  • uuid-dev
  • openjdk-8-jdk
  • python3.10-dev

Лучше всего автоматизировать это, но минимально нужен список зависимостей.

Кроме того, требуется очень свежая версия cmake. Она точно нужна? Ради неё приходится добавлять дополнительные репозитории в систему.

Exmo: 3 ордера не пришли в гейт

image

Из 5к ордеров 3 были отправлены ядром, но не были приняты гейтом и, соответственно, не были установлены. Судя по времени это было как раз в момент, когда аерон перезагружался, поэтому подозрение как раз на это. В целом это больше в тему аерона, но все же решил здесь отметить этот момент.

Aeron segfault

Image

В первую очередь меня интересует при каких обстоятельствах вылетает exeption, т.е. из за чего не правильно обрабатывается JSON внутри eron.

Добавить классы исключений

Предложение по улучшению aeron-python:
Добавить классы исключений, для того, чтобы их можно было обрабатывать в Python.

image

Приходят устаревшие сообщения по aeron

Сообщения повторяются, если несколько раз перезапускать гейт - чем больше сообщений, тем больше раз повторяются (если дублируются 2 раза, то достаточно 3-4 раза перезагрузить, если больше дубликатов - то больше раз).

Чтобы получить эту ошибку, нужно несколько раз запускать гейт и ядро на одном компьютере, не перезагружая Aeron. В таком случае, в гейт начинают приходить устаревшие сообщения, которые уже были получены гейтом. Они

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

2022-07-17 17:38:33:dragon_gate.aeron:60872:85 INFO Received message on aeron: {"event_id": "c792cdf7-3b34-42d8-b369-f9ed1752cc7c", "exchange": "kucoin", "instance": "py_test_core", "event": "command", "node": "core", "action": "cancel_all_orders", "message": null, "algo": "py_test", "timestamp": 1658068502450404, "data": null}
2022-07-17 17:38:33:dragon_gate.aeron:60872:85 INFO Received message on aeron: {"event_id": "a41ae991-6e14-4bbe-9802-977661a33ce2", "exchange": "kucoin", "instance": "py_test_core", "event": "command", "node": "core", "action": "get_balance", "message": null, "algo": "py_test", "timestamp": 1658068502451269, "data": []}
2022-07-17 17:38:33:dragon_gate.aeron:60872:85 INFO Received message on aeron: {"event_id": "4d4e89f1-ee6a-489a-9b00-53d8e754d99f", "exchange": "kucoin", "instance": "py_test_core", "event": "command", "node": "core", "action": "create_orders", "message": null, "algo": "py_test", "timestamp": 1658068537461023, "data": [{"client_order_id": "4d4e89f1-ee6a-489a-9b00-53d8e754d99f", "symbol": "ETH/USDT", "type": "limit", "side": "sell", "amount": 0.00813, "price": 1421.07}]}
2022-07-17 17:38:33:dragon_gate.aeron:60872:85 INFO Received message on aeron: {"event_id": "6932382d-5053-4217-8c1d-19e43341ae48", "exchange": "kucoin", "instance": "py_test_core", "event": "command", "node": "core", "action": "cancel_all_orders", "message": null, "algo": "py_test", "timestamp": 1658068537463223, "data": null}
2022-07-17 17:38:33:dragon_gate.aeron:60872:85 INFO Received message on aeron: {"event_id": "95a782d2-0465-4e59-b6d7-bf497c7adfb4", "exchange": "kucoin", "instance": "py_test_core", "event": "command", "node": "core", "action": "cancel_all_orders", "message": null, "algo": "py_test", "timestamp": 1658068605121181, "data": null}
2022-07-17 17:38:33:dragon_gate.aeron:60872:85 INFO Received message on aeron: {"event_id": "2e42fc5a-b102-4bdd-8a10-23dcb90c7562", "exchange": "kucoin", "instance": "py_test_core", "event": "command", "node": "core", "action": "get_balance", "message": null, "algo": "py_test", "timestamp": 1658068605123089, "data": []}
2022-07-17 17:38:33:dragon_gate.aeron:60872:85 INFO Received message on aeron: {"event_id": "2c4cc5b8-9181-4630-b59c-70f6fc7cb125", "exchange": "kucoin", "instance": "py_test_core", "event": "command", "node": "core", "action": "create_orders", "message": null, "algo": "py_test", "timestamp": 1658068620128000, "data": [{"client_order_id": "2c4cc5b8-9181-4630-b59c-70f6fc7cb125", "symbol": "ETH/USDT", "type": "limit", "side": "sell", "amount": 0.00813, "price": 1421.301}]}
2022-07-17 17:38:33:dragon_gate.aeron:60872:85 INFO Received message on aeron: {"event_id": "cfa428a5-dc84-42da-baa9-759c7165d187", "exchange": "kucoin", "instance": "py_test_core", "event": "command", "node": "core", "action": "cancel_all_orders", "message": null, "algo": "py_test", "timestamp": 1658068620129905, "data": null}
2022-07-17 17:38:33:dragon_gate.aeron:60872:85 INFO Received message on aeron: {"event_id": "e3798e38-4d90-4168-a0f1-6a2d7a0f698c", "exchange": "kucoin", "instance": "py_test_core", "event": "command", "node": "core", "action": "cancel_all_orders", "message": null, "algo": "py_test", "timestamp": 1658068657483899, "data": null}

Aeron-python

  • разработка
  • рефакторинг
  • документация

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.