将异步数据从C ++ dll中的线程传递给python的正确方法

时间:2020-01-21 13:01:01

标签: python-3.x multithreading asynchronous ctypes gil

我有一个用c ++(Windows!)编写的驱动程序,该驱动程序通过轮询线程中的硬件缓冲区来从外部硬件接收异步数据。我需要在Python3程序中接收这些异步数据包。我做了以下事情: 我使用ctypes将回调函数传递给了c dll,当接收到新数据包时,它为我简单地调用了此python回调。我的python回调将这个数据包放到一个队列中,就是这样,以后我的应用程序代码将使用这个队列。

这种方法可能存在一些问题,如herehere所述。 实际上存在一个问题,有时(?)c和python之间观察到巨大的延迟,但是从c端看来,回调调用的速度似乎很快。

实现此数据传输的正确方法是什么?

  • 我考虑过使用Queue并直接从c dll中填充它(queue.Queue已经是线程安全的吗?),但是我不确定是否可以直接从c访问python Queue实例。
  • 还是应该使用多重处理,并在单独的进程中运行c dll代码?
  • 还是某些IPC,例如ZeroMQ?

任何提示都会受到欢迎。

0 个答案:

没有答案