сервер: Ubuntu 14.04 2core и 4G.
gunicorn -k gevent и flask.
gunicorn==20.0.4
Flask==1.1.1
gevent==1.4.0
служба, стоящая за flask, представляет собой некоторое чтение / запись redis, просто маленькие ключи и ценности. используйте библиотеку python: redis == 3.4.1.
. Производственная проблема заключается в том, что, когда все больше людей используют один и тот же API, стоимость или время ответа API становятся тяжелыми и они проводят больше времени в Операции Redis: от 10 мс до 100 мс или даже больше.
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 tool. и обнаружил, что при использовании большего количества соединений ответ API тратит больше времени. Я хочу знать, почему при использовании -k gevent
API тратит больше времени.