我在同一台计算机上有一个包含多个 Python 进程的项目。
Python进程A是中心节点,它接收来自传感器的图像和数据。
Python 进程 A 将图像发送给进程 B 进行图像处理/特征检测,进程 B 将一些信息返回给进程 A。系统比这复杂得多,这就是为什么它首先被分开。
我想实现的一个想法是用整数标记图像,比方说
x
。这样,进程 B 可以说“嗨,进程 A,这是图像x
的数据”。
问题是,如何优雅快速地跨进程发送图像和这个整数?
想法:
我认识到这是一个架构问题,这些问题不受欢迎,但我觉得必须有一个更优雅的解决方案,我认为这是一个有趣的设计问题。
就我个人而言,我发现 Redis 非常适合这种类型的东西。把它想象成一个超快的“内存中”数据结构服务器,可以提供原子整数、字符串、图像、列表、队列、集合、排序集合、JSON、流、PUB/SUB ...这里是创建/读取对象的命令。
它具有 C、C++、Python、Ruby、PHP 和
bash
命令行的绑定,因此您可以轻松地从 shell 注入和检查测试数据。
而且它完全分布在网络中。
它可以处理二进制数据(无需序列化)以及最大 512MB 的键和值。
因此,您可以创建一个包含 JPEG/PNG/TIFF 或二进制数据 (SET) 原始图像的 Redis 对象,然后推送 (LPUSH) 包含对象名称和
id
的 JSON 到队列中处理。
根据需要运行尽可能多的处理节点
pops
关闭队列 (BRPOP),并通过添加更多来扩展。
有另一个
results
队列,工作人员将另一个 JSON 与他们的答案和相应的 id
.
您还可以指定一个“生存时间”,以便在给定时间后自动删除数据结构。
如果需要,您还可以在重新启动后创建持久性。
如果你想集群它,你也可以添加冗余。
我做了很多例子,尝试搜索我的用户名和
Redis
和image
。希望 this 会起作用。