我用的是火奴制服务器后面的烧瓶应用程序。我希望我的应用程序可以同时处理请求。为了测试这个目的,我编写了一个小测试:
@app.route('/test', methods=['GET'])
def get_tasks_test():
time.sleep(10)
return jsonify({'test is working'})我一开始是:
gunicorn应用程序:app localhost:8000 -重新加载-工人-连接100 -工人级gevent
现在我同时发送一些并发请求,并期望服务器在大约10秒内对所有请求做出响应(因为我设置了睡眠),但是,服务器似乎在每个请求之间等待10秒,这在我看来驳斥了并发性。我说的对吗?如何使服务器处理并发性?
发布于 2017-08-23 03:01:01
我不认为--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
https://stackoverflow.com/questions/45822670
复制相似问题