首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gevent - SSL WSGIServer在不应该阻塞的情况下阻塞

Gevent - SSL WSGIServer在不应该阻塞的情况下阻塞
EN

Stack Overflow用户
提问于 2013-10-01 06:28:06
回答 1查看 1.9K关注 0票数 1

因此,我正在创建一个服务器,并向它发出请求,所有这些都在同一个文件中。

这样做是适当的:

代码语言:javascript
复制
import gevent
import gevent.monkey
gevent.monkey.patch_all()

import requests

from gevent.pywsgi import WSGIServer
from flask import Flask


app = Flask(__name__)
app.debug = True

# Simple catch-all server
@app.route('/', defaults={'path': ''}, methods=['GET', 'POST'])
@app.route('/<path:path>', methods=['GET', 'POST'])
def catch_all(path):
    return 'It is Working!'


if __name__ == '__main__':
    http_server = WSGIServer(('', 8080), app)
    srv_greenlet = gevent.spawn(http_server.start)
    gevent.sleep(0.5)
    resp = requests.get('http://127.0.0.1:8080/')
    print resp.text
    http_server.stop()
    gevent.joinall([srv_greenlet])

输出:

代码语言:javascript
复制
(py2sni)user@host$ python question.py 
127.0.0.1 - - [2013-10-01 11:48:46] "GET / HTTP/1.1" 200 130 0.000614
It is Working!

但这阻碍了,我不得不在外部扼杀这个过程:

代码语言:javascript
复制
import gevent
import gevent.monkey
gevent.monkey.patch_all()

import requests

from gevent.pywsgi import WSGIServer
from flask import Flask


app = Flask(__name__)
app.debug = True

# Simple catch-all server
@app.route('/', defaults={'path': ''}, methods=['GET', 'POST'])
@app.route('/<path:path>', methods=['GET', 'POST'])
def catch_all(path):
    return 'It is Working!'


if __name__ == '__main__':
    http_server = WSGIServer(('', 4430), app, keyfile='server.key', certfile='server.crt')
    srv_greenlet = gevent.spawn(http_server.start)
    gevent.sleep(0.5)
    resp = requests.get('https://127.0.0.1:4430/')
    print resp.text
    http_server.stop()
    gevent.joinall([srv_greenlet])

这两个脚本的唯一区别是,一个使用SSL,而另一个不使用SSL。我在哪里搞错了?如果有帮助,我将使用gevent 0.13.8并请求2.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-01 19:57:51

问题在于这里

只有在使用pyopenssl和gevent/greenlet时才会发生这种情况。因为握手的重试没有IO,所以控制永远不会交给运行瓶的绿包,所以握手永远不会成功。

我已经在shazow/urllib3 3#250上为这个问题打开了一个bugreport/ have请求。支持自己或者等待下一个小版本的请求应该很简单。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19109436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档