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

标签 concurrency flask machine-learning gunicorn

我有4 machine learning models尺寸2GB每个,即 8GB总共。我收到关于 100 requests 的请求一次。每个请求大约需要 1sec .
我有一台机器有 15GB RAM 。现在如果我增加 number of workers在 Gunicorn 中,总内存消耗很高。所以我不能将 worker 数量增加到超过 2 人。
所以我对此有几个问题:

  1. worker 如何能够share models or memory它们之间?
  2. 哪种类型的员工适合,sync or async考虑到上述情况?
  3. 如何使用preload Gunicorn 中的选项如果它是一个解决方案?我用过它,但没有任何帮助。也许我的做法是错误的。

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

最佳答案

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

gunicorn -k gevent myapp:app

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

关于concurrency - 如何使用 Flask 和 Gunicorn 获得 1000 个请求的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35914587/

相关文章:

python - 为什么我的端口未在docker-compose中映射?

machine-learning - 从 URL 加载权重

machine-learning - 用于生成的神经网络?

java - FixedThreadPool 和 ExecutorCompletionService 的 OutOfMemory 错误

java - 调用 self 时不遵守 EJB Singleton WRITE 锁

python - Gunicorn 配置文件在哪里?

python - virtualenv flask 安装错误

pandas - 值太多,无法在 Python 中使用 NLTK 和 Pandas 解压

amazon-web-services - Lambda 并发数未按预期增加

java - ConcurrentHashMap 的迭代一致性保证