在python中与SPSC队列进行进程间通信

时间:2017-11-29 07:59:55

标签: python multithreading asynchronous ipc interprocess

我有多个写得很重的Python应用程序(producer1.pyproducer2.py,...),我想实现一个异步的非阻塞编写器(consumer.py )作为一个单独的进程,以便生产者不会被磁盘访问或争用阻止。

为了使这更容易优化,假设我只需要公开一个日志调用,它将一个固定长度的字符串从生产者传递给writer,而写入的文件不需要按调用时间排序。目标平台可以只支持Linux。我应该如何在调用线程上以最小的延迟惩罚实现这一点?

这似乎是多个无锁SPSC队列的理想设置,但我无法找到任何Python实现。

编辑1

我可以在/dev/shm上实现循环缓冲区作为内存映射文件,但我不确定我是否在Python中拥有原子CAS?

1 个答案:

答案 0 :(得分:1)

最简单的方法是在consumer.py中使用异步TCP / Unix套接字服务器 在这种情况下,使用HTTP将是一种开销。

生产者TCP / Unix Socket客户端将数据发送给消费者,然后消费者会在磁盘驱动器中写入数据之前立即做出响应。

消费者中的文件IO是阻塞的,但它不会阻止生产者,如上所述。