python - 非阻塞并发 wsgi 服务器

标签 python flask wsgi uwsgi gevent

我正在尝试能够同时响应传入的 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

如您所见,第一次调用阻止了 View 的执行。我做错了什么?

最佳答案

使用 curl 或浏览器以外的任何其他方式发送请求,因为浏览器对每个站点或每个地址的同时连接数有限制。或者使用两种不同的浏览器。

关于python - 非阻塞并发 wsgi 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21758014/

相关文章:

python - 如何在 Python 中将多个项目从一个列表移动到另一个列表

python - 导入Flask-SocketIO实例

python - 区分nginx、haproxy、varnish和uWSGI/Gunicorn

python - 允许 EC2 监听端口 443 以获取来自负载均衡器的未加密请求

python - Python.org 上的类(class)教程

python - 为什么我得到 "ImportError: No module named pdb"

python - UHF RFID 阅读器和 Python

Python3 Flask 在服务器内存中上传文件

python - 如何通过Python访问AWS服务?

python - 将命令行参数传递给 uwsgi 脚本