Я разрабатываю скрипт Python, в котором я беру данные из устройства BLE со скоростью около 50-200 Гц. По состоянию на сейчас, я делаю это синхронно:«Правильный» процесс для выборки с внешнего устройства (многопоточность/синхронизация) в Python
while True:
if time_now > time_before + (1/sample_rate):
do_stuff()
Это прекрасно работает, за исключением того, что она полностью блокирующей нитей и других приложений (если я хочу совместить с Qt GUI, например), за исключением. Каков правильный способ решения этой проблемы?
- Могу ли я легко реализовать многопоточную установку, где каждый «пробоотборник» (while-loop) получает свой собственный поток?
- Должен ли я реализовать операции таймера и как убедиться, что сценарий не убит во время ожидания нового образца?
Моя проблема аналогична this, которая, однако, предназначена для C#.
Я бы отделил процедуру опроса в выделенном потоке, который будет записывать образцы где-нибудь (память, очередь и т. Д.). Затем в других частях приложения я читал эти образцы, когда они были доступны. Преимущество в том, что hw fault/block не блокирует вашу скриптовую логику. – BeerBaron
Вам нужно вообще опросить? Не реализует ли устройство уведомления, чтобы вы были асинхронно и автоматически уведомлены каждый раз, когда изменяется характеристика? Посмотрите примеры BLE, чтобы увидеть, как включить уведомления об изменениях для данного признака. –