python - gunicorn(with gevent)并未解决Flask阻塞问题,求指导..
天蓬老师
天蓬老师 2017-04-17 13:54:07
0
1
869

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就可以解决阻塞问题...

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(1)
Ty80

不要用time.sleep要用gevent.sleep,兩者的機制不一樣的,Tornado使用的是自己的IOLoop,gevent則使用libev(舊版使用libevent)。因此,只有gevent自己的sleep才能通知libev目前協程已被阻塞。 gevent的monkey patch也是把各個庫裡面相關的部分全部改成用libev的才能讓gevent運作。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!