如何使用Flask和Gunicorn获得1000个请求的并发性

nee*_*eel 5 concurrency machine-learning flask gunicorn

我有各自4 machine learning models的大小2GB,即8GB总数.我一次收到请求100 requests.每个请求都在进行中1sec.
我有一台机器15GB RAM.现在如果我增加了number of workersGunicorn,总内存消耗会很高.所以我不能增加超过2的工人数量.
所以我对此几乎没有问题:

  1. 工人share models or memory之间如何相处?
  2. sync or async考虑到上述情况,哪种类型的工人适合?
  3. 如果是解决方案,如何使用preload选项Gunicorn?我用它但它没有任何帮助.可能是我以错误的方式做这件事.

这是我正在使用的Flask代码
https://github.com/rathee/learnNshare/blob/master/agent_api.py

dav*_*ism 5

使用 gevent 工作器(或另一个事件循环工作器),而不是默认工作器。默认同步工作线程处理每个工作进程的一个请求。只要每个请求是非阻塞的,异步工作者就可以为每个工作进程处理无限数量的请求。

gunicorn -k gevent myapp:app
Run Code Online (Sandbox Code Playgroud)

可以预见的是,您需要安装GEVENT此:pip install gevent