现状:
我有两个 python 应用程序(前端服务器和数据收集器,数据库在它们之间)。
目前使用 redis 作为 db 及其发布/订阅协议,以便在有新数据可用时通知前端。
但是我可能想使用不同的数据库(并且不想将redis保留在系统上只是为了发布/订阅)。
如果数据收集器已向数据库处理新数据(不使用 beanstalkd 或 redis 等外部消息队列),是否有任何简单的替代方法来通知我的前端?
ZeroMQ 是一个不错的选择。它具有良好的 Python 绑定,它使同一台机器上的进程之间的通信和不同机器上的进程看起来几乎相同。
从阅读指南开始:http: //zguide.zeromq.org/page :all
正如我在评论中提到的,如果您想要通过网络传输的东西,那么除了设置 Web 服务(flask 应用程序?)或编写自己的 INET 套接字服务器之外,操作系统没有内置任何东西可以在它们之间进行通信机器。Beanstalk 在 Python 中有一个非常简单的 API,我已经非常成功地将它用于这种事情。
try:
beanstalk = beanstalkc.Connection(host="my.host.com")
beanstalk.watch("update_queue")
except:
print "Error connecting to beanstalk"
while True:
job = beanstalk.reserve()
do_something_with_job(job)
如果您只打算在同一台机器上工作,那么请阅读 linux IPC。进程之间的套接字连接非常快,几乎为零开销。当您利用 epoll 回调时,它们也可以成为异步程序的一部分。