如何使用Flask和Gunicorn实现1000个请求的并发?

10

我有4个机器学习模型每个大小为2GB,总计8GB。 每次我都会收到大约100个请求。每个请求需要1秒左右。
我有一台拥有15GB RAM的计算机。现在,如果我增加Gunicorn中工作进程的数量,总内存消耗将升高。所以我不能把工人数量增加到2个以上。
因此,我有一些关于此的问题:

  1. 工人如何在它们之间共享模型或内存
  2. 考虑到上述情况,哪种类型的工作进程适合,同步还是异步
  3. 如果有解决方案,如何使用Gunicorn中的preload选项? 我使用过它,但没有帮助。也许我用错了。

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

1个回答

5

使用gevent worker(或另一个事件循环worker),不要使用默认worker。 默认同步worker每个worker进程处理一个请求。 异步worker处理无限数量的请求,只要每个请求是非阻塞的。

gunicorn -k gevent myapp:app

需要安装gevent: pip install gevent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接