本文介绍了分享在gunicorn进程中的一个numpy阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个大的numpy数组,存储在redis中。这个数组作为一个索引。我想通过运行在gunicorn上的烧瓶应用程序通过HTTP提供过滤结果,我希望所有由gunicorn产生的工作人员都能访问这个numpy数组。我不想每次都去redis,反序列化内存中的整个数组,而是在启动时,我想运行一些代码,这样做的每个分叉gunicorn工人只是得到这个数组的副本。问题是,我找不到如何使用gunicorn的服务器钩子的例子:

来达到这个目的。
可能是服务器挂钩不是正确的方式,有没有其他人做过类似的事情?

解决方案

创建监听器服务器的一个实例,让你的gunicorn子进程连接到这个进程来获取他们需要的任何数据作为客户端。这样,进程可以根据需要修改信息,并从主进程请求它,而不是去Redis重新加载整个数据集。



更多信息:。

I have a big numpy array that is stored in redis. This array acts as an index. I want to serve filtered result over http from a flask app running on gunicorn and I want all the workers spawned by gunicorn to have access to this numpy array. I don't want to go to redis every time and deserialize the entire array in memory, instead on startup I want to run some code that does this and every forked worker of gunicorn just gets a copy of this array. The problem is, I can not find any examples on how to use gunicorn's server hooks:http://docs.gunicorn.org/en/latest/configure.html#server-hooksto achieve this.May be server hooks is not the right way of doing it, has anyone else done something similar?

解决方案

Create an instance of a Listener server and have your gunicorn children connect to that process to fetch whatever data they need as Clients. This way the processes can modify the information as needed and request it from the main process instead of going to Redis to reload the entire dataset.

More info here: Multiprocessing - 16.6.2.10. Listeners and Clients.

这篇关于分享在gunicorn进程中的一个numpy阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-12 08:38