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

时间:2016-03-10 11:01:49

标签: concurrency flask machine-learning gunicorn

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

  1. 工人之间如何share models or memory
  2. 哪种类型的工作人员适合,sync or async考虑上述情况?
  3. 如果它是一个解决方案,如何在preload中使用Gunicorn选项?我用它但它没有任何帮助。可能是我做错了。
  4. 这是我正在使用的Flask代码 https://github.com/rathee/learnNshare/blob/master/agent_api.py

1 个答案:

答案 0 :(得分:3)

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

gunicorn -k gevent myapp:app

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