Присвойте ProcessPoolExecutor определенному процессору и используйте очереди для связи - PullRequest
0 голосов
/ 17 апреля 2019

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

Я использую Raspberry 3 B + для связи с безопасным ПЛ с постоянным временем цикла 2 мс. Чтобы удовлетворить свои потребности, я использовал Preempt-RT Patch для ядра Linux и работал с точной микросекундной синхронизацией этой ссылки:

Как получить метки времени в миллисекундах и микросекундах с разрешением в Python

С помощью isolcpus и команды taskset я выделил два процессора для моего скрипта pyhton, чтобы избежать более продолжительного цикла, вызванного операционной системой. Получение и отправка некоторых битов через GPIO Raspberry с временем цикла 2 мс - моя первая задача, и теперь она отлично работает.

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

Однако, вот моя проблема. Если я использую Concurrent Future ThreadPoolExecutor, я могу легко использовать очередь, но к 2 мс времени, как и ожидалось, полностью уничтожается. Поэтому я подумал об использовании ProcessPoolExecutor для использования как изолированных процессоров, так и разделения двух задач на один процессор каждый. Но есть два вопроса, которые я не могу решить:

  1. Я хочу назначить быструю задачу одному процессору, а медленную задачу - второму процессору (оба процессора изолированы). Как мне это сделать?

  2. Мне нужны две очереди (передача, получение) для связи. Я не смог найти способ связи между двумя процессами в обоих направлениях.

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

Есть ли способ решить эту проблему? Кстати, я совершенно новичок в python и надеюсь, что смогу понять ваши идеи. ; -)

1 Ответ

0 голосов
/ 03 мая 2019

Если у кого-то возникнет такая же проблема в будущем: я решил проблему с помощью ZeroMQ для связи между двумя независимыми сценариями.Я установил двунаправленную связь с шаблоном публикации / подписки сообщений.См .: https://learning -0mq-with-pyzmq.readthedocs.io / en / latest / pyzmq / Patterns / pubsub.html

...