gpt4 book ai didi

wsgi - 使用 Gevent 和 WSGI 阻止调用

转载 作者:行者123 更新时间:2023-12-04 08:46:10 24 4
gpt4 key购买 nike

我刚刚开始使用协同程序,并阅读了有关 gevent 和 greenlets 的内容。为了进行测试,我通过 gevents pywsgi 模块提供了这段代码:

from gevent.pywsgi import WSGIServer
import gevent

def hello_world(env, start_response):
gevent.sleep(5)
start_response('200 OK', [('Content-Type', 'text/html')])
return ["<b>hello world</b>"]

print 'Serving on 8088...'
WSGIServer(('127.0.0.1', 8888), hello_world).serve_forever()

我预计每个请求在显示文本之前都会有 5 秒的延迟。然而,发生的情况是,每个请求都会与对 gevent.sleep() 的调用排队,如果第二个请求是在第一个请求之后立即启动的,那么第二个请求将花费近 10 秒。

serve_forever 函数不是为每个请求生成新的 greenlets 吗?

最佳答案

您使用什么来发出请求?我怀疑问题出在这里。

我用 ab (Apache Benchmark) 测试了你的代码并得到了这个(输出已编辑):

$ ab -c 200 -n 200 http://localhost:8888/

Completed 100 requests
Completed 200 requests
Finished 200 requests

Concurrency Level: 200
Time taken for tests: 5.048 seconds
Requests per second: 39.62 [#/sec] (mean)
Time per request: 5048.386 [ms] (mean)

ab 命令向 gevent 服务器发出 200 个并发请求。五秒钟后,所有请求都已完成。如果按照您的建议对请求进行排队,则此基准测试需要 1000 秒。

我想您的系统可能没有正确支持 greenlets,但更有可能是您用来测试的方法在每个请求上都被阻塞了。 IE。服务器支持并发,但您的客户端不支持。

关于wsgi - 使用 Gevent 和 WSGI 阻止调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7098284/

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