gpt4 book ai didi

python - Gevent - SSL WSGIServer 在不应该阻塞的时候阻塞

转载 作者:行者123 更新时间:2023-11-30 23:33:01 25 4
gpt4 key购买 nike

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

这可以正常工作:

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])

输出:

(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!

但是这会阻塞,我必须在外部终止该进程:

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,另一个不使用。我在这里哪里犯了错误?如果有帮助,我正在使用 gevent 0.13.8 和 requests 2.0

最佳答案

问题出在here .

它仅在使用 pyopenssl 和 gevent/greenlet 时发生。因为握手的重试没有IO,所以控制权永远不会交给正在运行的flask greenlet,所以握手永远不会成功。

我已经在shazow/urllib3#250为此打开了一个错误报告/拉取请求。向后移植自己或等待下一个次要版本的请求应该很简单。

关于python - Gevent - SSL WSGIServer 在不应该阻塞的时候阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19109436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com