我正在尝试同时响应传入的Web请求,而处理请求包括相当长的IO调用。我将使用gevent,因为它应该是“非阻塞”
我发现的问题是即使我有很多gevent线程,也会按顺序处理请求。由于某种原因,请求由单个绿色线程提供服务。
我有nginx(默认配置在这里我认为不相关),我也有uwsgi和简单的wsgi应用程序模拟IO阻塞调用gevent.sleep()。他们在这里:
uwsgi.ini
[uwsgi]
chdir = /srv/website
home = /srv/website/env
module = wsgi:app
socket = /tmp/uwsgi_mead.sock
#daemonize = /data/work/zx900/mob-effect.mead/logs/uwsgi.log
processes = 1
gevent = 100
gevent-monkey-patch
wsgi.py
import gevent
import time
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
t0 = time.time()
gevent.sleep(10.0)
t1 = time.time()
return "{1} - {0} = {2}".format(t0, t1, t1 - t0)
然后我同时(几乎)在我的浏览器中打开两个标签,这就是我得到的结果:
1392297388.98 - 1392297378.98 = 10.0021491051
# first tab, processing finished at 1392297378.98
1392297398.99 - 1392297388.99 = 10.0081849098
# second tab, processing started at 1392297398.99
如您所见,首先调用阻止执行的视图。我错了什么?
答案 0 :(得分:3)
使用curl或除浏览器之外的任何其他内容发送请求,因为浏览器对每个站点或每个地址的同时连接数有限制。或者使用两种不同的浏览器。