我有多个写得很重的Python应用程序(producer1.py
,producer2.py
,...),我想实现一个异步的非阻塞编写器(consumer.py
)作为一个单独的进程,以便生产者不会被磁盘访问或争用阻止。
为了使这更容易优化,假设我只需要公开一个日志调用,它将一个固定长度的字符串从生产者传递给writer,而写入的文件不需要按调用时间排序。目标平台可以只支持Linux。我应该如何在调用线程上以最小的延迟惩罚实现这一点?
这似乎是多个无锁SPSC队列的理想设置,但我无法找到任何Python实现。
我可以在/dev/shm
上实现循环缓冲区作为内存映射文件,但我不确定我是否在Python中拥有原子CAS?
答案 0 :(得分:1)
最简单的方法是在consumer.py
中使用异步TCP / Unix套接字服务器
在这种情况下,使用HTTP将是一种开销。
生产者TCP / Unix Socket客户端将数据发送给消费者,然后消费者会在磁盘驱动器中写入数据之前立即做出响应。
消费者中的文件IO是阻塞的,但它不会阻止生产者,如上所述。