为Flask和gunicorn提供并发用户服务

时间:2017-08-22 16:19:14

标签: python flask gunicorn

我正在使用gunicorn服务器后面的烧瓶应用程序。我想我的应用程序服务并发请求。为了测试这个目的,我写了一个小测试:

 @app.route('/test', methods=['GET'])
 def get_tasks_test():
     time.sleep(10)
     return jsonify({'test is working'})

我开始枪手:

  

gunicorn app:app localhost:8000 --reload --worker-connections 100    - 工人级gevent

现在我同时发送一些并发请求,并期望服务器在大约10秒内响应所有这些请求(因为我设置了睡眠) 但是,服务器似乎在每个请求之间等待10秒,这在我看来反驳了并发性。 我对吗?我该怎么做才能使我的服务器处理并发?

1 个答案:

答案 0 :(得分:3)

我不认为--worker-connections是你想要的。它正在使用被time.sleep(10)阻止的gevent。

您想要的是--workers 4,它将打开4个工作进程。这将允许您同时提供4个请求。我不会像工作人员那样把它放在100,而一般的经验法则是2-4x the number of processor cores。因此,如果你有一个启用超线程的四核机器,你可以做32个工作。

最后,您可以通过--threads 4让每个进程打开4个线程来处理请求。 小心不要用很多线程创建太多进程。这不是无限的资源。

参考

http://docs.gunicorn.org/en/latest/settings.html?highlight=--worker-connections#workers

http://docs.gunicorn.org/en/stable/design.html#choosing-a-worker-type