服务器: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花费的时间更多。
暂无答案!
目前还没有任何答案,快来回答吧!