2017-08-22 27 views
0

我在gunicorn服务器后面使用了一个应用程序。我希望我的应用程序能够服务于并发请求。为了测试这个目的,我写了一个小测试:为Flask和gunicorn服务的并发用户

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

我开始gunicorn有:

gunicorn应用:应用本地主机:8000 --reload --worker,连接100 - 工人一流GEVENT

现在我同时发送一些并发请求,并希望服务器(因为睡眠的我给自己定)在10秒左右为所有这些回应 但是,服务器似乎等待10秒在每个请求之间,这反驳了我认为的并发性。 我说得对不对?我应该怎么做才能让我的服务器处理并发性?

回答

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

相关问题