gunicorn(with gevent)并未解决Flask阻塞问题,求指导..

发布于 2022-08-31 09:10:36 字数 971 浏览 14 评论 0

Flask#server.py:

from flask import Flask
import time

app = Flask(__name__)

@app.route("/")
def index():
    time.sleep(10)
    return "Hello World"
if __name__=='__main__':
    app.run()

gunicorn配置#gun.py:

import os
bind='127.0.0.1:5000'
workers=4
backlog=2048
worker_class="gevent" #sync, gevent,meinheld
debug=True
proc_name='/tmp/gunicorn.pid'
pidfile='/tmp/gunicorndebug.log'
loglevel='debug'

测试脚本#test.py:

import time
import requests
s=time.time()
print requests.get("http://127.0.0.1:5000").text
print time.time()-s

然后启动服务:

gunicorn -c gun.py server:app

同时我开启新的两个shell进行测试,几乎同时执行python test.py
测试结果为:

一个为:
Hello World
19.0649909973
另一个为:
Hello World
19.0649909973

本来Flask就是阻塞的,以为加上gunicorn就ok了,但是显然Flask被阻塞了,请问该如何解决呢?之前用tornado加上@asynchronous就可以解决阻塞问题...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雪若未夕 2022-09-07 09:10:36

不要用time.sleep要用gevent.sleep,两者的机制不一样的,Tornado使用的是自己的IOLoop,gevent则使用libev(老版本使用libevent)。因此,只有gevent自己的sleep才能通知libev当前协程已被阻塞。gevent的monkey patch也是把各个库里面相关的部分全部改成用libev的才能让gevent起作用。

梅倚清风 2022-09-07 09:10:36

你的问题是 gun.py没有gevent.monkey.patch_all(),所以路由中调用time.sleep(10),没有被替换成gevent.sleep(10)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文