Python tornado имеет большую разницу во времени между запросом от клиента и выполнением представления

#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 вместо этого.