2015-10-20 2 views
0

При запуске двух программ, которые используют контакты python gpio на Raspberry Pi, становится медленнее. Один из них - магнитный датчик, а другой - датчик температуры и влажности. Последний - тот, который замедляется. Вместо того, чтобы печатать температуру каждые 2 секунды, она печатает каждые 5-10 секунд. Если это происходит в магнитном датчике, работа выполняется быстрее.Python становится медленным при запуске двух программ в малине pi

ответ

1

Похоже, ваша проблема не в Python, а в IO. Даже если вы используете разные контакты, GPIO из Малины использует одну и ту же шину для обработки всех контактов, поэтому одному процессу нужно ждать другого использования, чем иметь время.

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

basic ideia: Смешайте обе программы только одним. Сингулярный процесс/поток для управления всеми чтениями.

улучшенный идеал: Разделите свой код на три процесса. Два из них будут просто читать/писать массив и использовать это значение, как это было в GPIO. Одним из этих процессов будет ваш основной процесс и будет SharedArray для обработки данных GPIO. Помните, что чтение из ОЗУ намного лучше/быстрее, чем чтение из GPIO, поэтому просто используйте Array для обновления состояния от ввода-вывода. Вы можете использовать один массив для установки новых значений, а другой - для хранения фактических значений.

Некоторое время назад я использовал некоторый Sockets для передачи некоторых данных ввода-вывода по некоторым потокам и мог получать обновленные данные (изображение с камеры) и делиться ими с потоками с промежутком в 100 мс, просто избегая зазора ввода-вывода. Таким образом, вы можете получить аналогичный результат, используя SocketServer lib с некоторыми workers, чтобы распространять информацию.

0

Вместо того чтобы запускать программы одновременно, попробуйте запустить их один за другим. Очевидно, что у малины Pi есть аппаратные ограничения из-за его размера и стоимости. То, что я хотел бы предложить, - это запустить только одну программу за раз. Вы можете поместить их в базовый цикл, где вы запустите программу 1, затем запустите программу 2, а затем вернитесь к началу цикла.

Смежные вопросы