Правильный способ передачи асин c данных в python из потока в c ++ dll - PullRequest
0 голосов
/ 21 января 2020

У меня есть драйвер, написанный на 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?

Любая подсказка будет приветствоваться.

...