gevent和flask使redis w/r花费更多的时间

kt06eoxx  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(311)

服务器:ubuntu14.042core和4g。
gunicorn-k喷口和 flask 。

gunicorn==20.0.4
Flask==1.1.1
gevent==1.4.0

flask 后面的服务是一些redis读/写,只是一些小的键和值。使用python库:redis==3.4.1。
生产问题是:当更多的人同时使用同一个api时,api响应的成本或时间会变得很重,并且在redis操作中花费更多的时间:从10ms增加到100ms甚至更高。

mport time
import functools
import redis
from flask import Flask, request, jsonify

app = Flask(__name__)

pool = redis.ConnectionPool(host='127.0.0.1', 
                    port='6379', 
                    db=6,
                    encoding='utf-8',
                    decode_responses=True)
r = redis.StrictRedis(
        connection_pool=pool
    )

def timer(func):
    @functools.wraps(func)
    def decorator(*args,**kwargs):
        s = time.time()
        data = request.json or request.form.to_dict()
        r = func(data, *args,**kwargs)
        end = time.time()
        print('spend: {}'.format(int(end * 1000 - s * 1000)))
        return r

    return decorator

def get_no():
    z = r.get('test2')
    print('room_no: {}'.format(z))
    if not z:
        create_no()
        return get_no()
    else:
        if player_num() > 100:
            create_no()
            return get_no()
        else:
            return z

def player_num():
    return r.incrby('room_num')

def create_no():
    if r.setnx('lock', 1):
        print('locked!')
        n = r.incrby('test2')
        r.delete('room_num')
        r.delete('lock')
        return n
    else:
        print('sleep!')
        time.sleep(0.05)

@app.route('/test', methods=['POST', 'GET'])
@timer
def test(data):
    # no = get_no()
    # print(no)
    z = r.incrby('incry_4')
    print(z)
    return jsonify(dict(code=200))

另外,我用wrk工具在本地机器上做了一些测试。并发现,当使用更多连接时,api响应花费的时间更多。我想知道为什么使用 -k gevent ,api花费的时间更多。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题