надеюсь, вы, ребята, можете мне помочь.
Я много искал, но не смог найти решение моей проблемы.
Я использую Raspberry 3 B + для связи с безопасным ПЛ с постоянным временем цикла 2 мс.
Чтобы удовлетворить свои потребности, я использовал Preempt-RT Patch для ядра Linux и работал с точной микросекундной синхронизацией этой ссылки:
Как получить метки времени в миллисекундах и микросекундах с разрешением в Python
С помощью isolcpus и команды taskset я выделил два процессора для моего скрипта pyhton, чтобы избежать более продолжительного цикла, вызванного операционной системой.
Получение и отправка некоторых битов через GPIO Raspberry с временем цикла 2 мс - моя первая задача, и теперь она отлично работает.
Вторая задача - прочитать и записать информацию в базу данных MySQL, которая не критична по времени (соединение с базой данных уже работает нормально).
Поэтому я подумал об использовании очереди, которая могла бы быть связующим звеном между моей быстрой задачей и медленной задачей базы данных.
Однако, вот моя проблема.
Если я использую Concurrent Future ThreadPoolExecutor, я могу легко использовать очередь, но к 2 мс времени, как и ожидалось, полностью уничтожается.
Поэтому я подумал об использовании ProcessPoolExecutor для использования как изолированных процессоров, так и разделения двух задач на один процессор каждый.
Но есть два вопроса, которые я не могу решить:
Я хочу назначить быструю задачу одному процессору, а медленную задачу - второму процессору (оба процессора изолированы). Как мне это сделать?
Мне нужны две очереди (передача, получение) для связи. Я не смог найти способ связи между двумя процессами в обоих направлениях.
Я также подумал об использовании двух разных сценариев, которые я могу добавить в процессор независимо, но здесь снова возникает проблема связи между этими сценариями.
Есть ли способ решить эту проблему?
Кстати, я совершенно новичок в python и надеюсь, что смогу понять ваши идеи. ; -)