Консультирование по шаблону: трансляция массивов numpy для различных процессов. Очереди, ZMQ? - PullRequest
0 голосов
/ 14 ноября 2018

Я создаю настольное приложение для получения данных с быстрой камеры (частота кадров около кГц). Чтобы увеличить продолжительность фильмов, я помещал кадры в очередь, которая использовалась отдельным процессом, который записывал на диск.

Теперь мне нужно добавить немного большей гибкости (я не пользователь программы), чтобы другие могли развиваться в дополнение к тому, что я делаю. Общая закономерность заключается в том, что данные, сгенерированные камерой, могут использоваться различными процессами (не только для сохранения на диск). Я бы не хотел, чтобы каждый новый человек изменял базовый код, например, создавая новую очередь для своего процесса.

Поэтому мой вопрос: существует ли способ передачи массивов numpy от одного процесса к переменному числу других процессов? Что-то вроде того, как работают сигналы и слоты в Qt, но это безопасно для многих процессов в Python.

Я сталкивался с ZMQ , который кажется идеальным, но не смог найти примеров людей, работающих над крайними случаями. Например, что произойдет, если сервер вещает, но клиенты заняты, эти кадры будут отброшены? Насколько эффективна сериализация двумерного массива (около 1000x50 uint16) и восстановление на другой стороне сокета по сравнению с очередями?

Шаблон, о котором я думаю:

  • 1 процесс получает данные и передает каждый кадр
  • N независимых процессов определяют два дочерних процесса каждый:
    • 1 процесс получения трансляции, воссоздания массива и помещения его в объект очереди
    • 1 процесс использования очереди

Таким образом, даже если дочерние процессы отстают, никакие кадры не будут потеряны.

Я ищу советы по шаблону, а также по библиотекам для использования. ZMQ несколько раз появлялся в моих поисках, но могут быть и другие варианты. Основная среда развертывания: ПК с Windows .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...