我正在使用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秒,这在我看来反驳了并发性。 我对吗?我该怎么做才能使我的服务器处理并发?
答案 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