#python #tornado
Вопрос:
Я использую платформу tornado для создания веб-сервера, но я столкнулся с некоторыми проблемами. Существует большая разница во времени между запросом от клиента и выполнением представления. Что мне делать? Я провел некоторую отладку и записал время:
код запроса клиента выглядит следующим образом:
begin_time = datetime.now()
req_id = uuid.uuid4().hex
try:
resp = requests.post(url, json={'req_id': req_id}, timeout=5).json()
except Exception:
pass
print(f"req_id: {req_id}, request_time: {begin_time}, resp_time: {datetime.now()}")
серверный код, подобный этому:
class BaseHandler(tornado.web.RequestHandler):
def __init__(self, *argc, **argkw):
self.init_time = datetime.datetime.now()
super(BaseHandler, self).__init__(*argc, **argkw)
class HeartbeatDetect(BaseHandler):
SUPPORTED_METHODS = ("POST", "GET")
async def post(self):
req_id = self.qdict['req_id']
logging.info(f'************init_time:{self.init_time}, view_time:
{datetime.datetime.now()} request coming: {self.qdict} req_id: {req_id}')
..... do something
Последнее записанное время выглядит так:
init_time : 2021-11-15 10:01:20.353389
view_time : 2021-11-15 10:01:22.288460
request_time: 2021-11-15 10:01:11
resp_time : 2021-11-15 10:01:16
Существует разница в 9 секунд между клиентом request_time
и сервером init_time
Я не знаю, почему это происходит, может ли кто-нибудь мне помочь? Я очень благодарен!
Комментарии:
1. Клиент и сервер работают в разных режимах обработки, верно?
2. @xyres Клиентский код-это скрипт, который выполняется регулярно, и он является функцией обнаружения сердцебиения. Приведенный выше код частично взят из производственного сервиса;Я не знаю, почему это происходит; В 2021-11-15 10:01 сию минуту объем запроса составляет 3231
3. Трудно сказать наверняка. Я не могу воспроизвести такое поведение на своем компьютере.
Ответ №1:
Подклассы не должны переопределять __init__
переопределение RequestHandler.initialize
вместо этого.