У меня есть драйвер, написанный на c ++ (Windows!), Который получает асинхронные данные от внешнего HW путем опроса буфера HW в потоке. Мне нужно, чтобы эти асинхронные пакеты данных были получены в моей программе python3. Я сделал следующее: я передал функцию обратного вызова в dll c с помощью ctypes, и он просто вызывает для меня этот python -callback при получении нового пакета. Мой python -callback помещает этот пакет в очередь, и все, позже мой код приложения использует эту очередь.
При таком подходе может быть несколько проблем, как обсуждено здесь , или здесь . И на самом деле есть проблема, иногда наблюдается огромная задержка между (?) c и python, однако обратный вызов кажется быстрым со стороны c.
Что такое правильный способ достижения этой передачи данных?
- Я думал об использовании очереди и заполнении ее непосредственно из c dll (queue.Queue уже поточно-безопасен?), но я не уверен, если Я могу получить доступ к экземпляру python Queue непосредственно из c.
- Или я должен использовать многопроцессорность и запускать код c dll в отдельном процессе?
- Или какой-нибудь IP C, как ZeroMQ?
Любая подсказка будет приветствоваться.