Web应用程序:在请求之间保持大型对象

5 投票
1 回答
1600 浏览
提问于 2025-04-17 09:22

我正在开发一个与基因组搜索相关的网页应用。这个应用使用了一个叫做 后缀树库,通过Cython进行绑定。这样的对象很大(从几百MB到大约10GB),从磁盘加载它们的时间和处理这些对象以响应页面请求的时间差不多。我想找到一种方法,在服务器启动时一次性加载几个这样的对象,然后在所有页面请求中使用它们。

我尝试过使用远程管理/客户端的设置,利用多进程模块,模仿 这个示例,但是当客户端连接时出现了错误信息,提示这个对象无法被序列化。

1 个回答

7

我建议你写一个小的Flask应用程序(或者直接用WSGI也行,不过用Flask会简单一些,因为这样更容易快速启动)。这个应用程序可以加载基因组数据库,然后提供一个简单的接口。可以像这样:

app = Flask(__name__)
database = load_database()

@app.route('/get_genomes')
def get_genomes():
    return database.all_genomes()

app.run(debug=True)

或者,你也可以做一些更合理的设计。

另外,如果你需要同时处理多个请求(我记得app.run一次只能处理一个请求),可以先尝试使用线程……如果这样还是太慢,你可以在加载完数据库后用os.fork()来创建多个请求处理程序(这样它们就可以共享同一个内存中的数据库)。

撰写回答