我有一个大的只读数据结构(在networkx中加载的图形,虽然这不应该很重要),我在我的Web服务中使用.Web服务是在Flask中构建的,然后通过Gunicorn提供服务.事实证明,对于我旋转的每个枪支工作者来说,这个工作都拥有我自己的数据结构副本.因此,当我有8个运行时,我的~700mb数据结构可以完全由一个工人管理,变成了一个非常大的内存.有没有什么方法可以在gunicorn进程之间共享这个数据结构,所以我不必浪费那么多内存?
我使用Flask实现了一个简单的微服务,其中处理请求的方法根据请求数据和加载到内存中的相当大的数据结构计算响应.现在,当我使用gunicorn和大量工作线程部署此应用程序时,我只想在所有工作者的请求处理程序之间共享数据结构.由于只读取数据,因此不需要锁定或类似.做这个的最好方式是什么?
基本上需要的是:
据我所知,gunicorn允许我实现各种钩子函数,例如在服务器初始化时,但是烧瓶请求处理程序方法对gunicorn服务器数据结构一无所知.
我不想为此使用redis或数据库系统之类的东西,因为所有数据都在需要加载到内存中的数据结构中,并且不必涉及反序列化.
对使用大数据结构的每个请求执行的计算可能很长,因此必须在每个请求的真正独立的线程或进程中同时发生(这应该通过在多核计算机上运行来扩展).