В настоящее время я работаю над своим веб-сервером Backend, используя торнадо.Как сделать async RequestHandler в tornado python
Проблема у меня прямо сейчас:
- когда сделан запрос, а сервер обработки запроса все другие запрос блокированы
Мой RequestHandler:
class UpdateServicesRequestHandler(RequestHandler):
@gen.coroutine
def get(self):
update = ServiceUpdate()
response = yield update.update_all()
if self.request.headers.get('Origin'):
self.set_header('Access-Control-Allow-Origin', self.request.headers.get('Origin'))
self.set_header('Content-Type', 'application/json')
self.write(response)
Мои update_all()
:
@gen.coroutine
def update_all(self):
for service in self.port_list:
response = yield self.update_service(str(service.get('port')))
self.response_list.append(response)
self.response = json.dumps(self.response_list)
return self.response
My update_sevice()
:
process = Popen([ command ], stdout=PIPE, stderr=PIPE, shell=True)
output, error = process.communicate()
Дело в том, что мне нужен результат метода update_all()
. Итак, есть ли возможность сделать этот запрос не блокирующим весь сервер для запросов?
Спасибо!
Является ли 'update.update_all()' сопроцессором? Использует ли он неблокирующий ввод-вывод для выполнения своей работы? – dano
только что обновил мой пост .. – daB0bby
Теперь нам нужно знать, что выглядит 'update_service'. :) В конечном счете, нам нужно знать, если вы делаете медленный блокирующий вызов где-то внутри 'update_all'. – dano