Я хочу создать веб-сервер, который автоматически обрабатывает «заказы» при получении запроса POST.
Пока мой код выглядит так:
from json import loads
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.web import Application, url, RequestHandler
order_list = list()
class MainHandler(RequestHandler):
def get(self):
pass
def post(self):
if self.__authenticate_incoming_request():
payload = loads(self.request.body)
order_list.append(payload)
else:
pass
def __authenticate_incoming_request(self) -> bool:
# some request authentication code
return True
def start_server():
application = Application([
url(r"/", MainHandler)
])
server = HTTPServer(application)
server.listen(8080)
IOLoop.current().start()
if __name__ == '__main__':
start_server()
Вот что я хотите достичь:
- Получить запрос POST с информацией о входящих "заказах"
- Выполнить действие
A
n раз на основе значения, определенного в request.body
( одновременно, если возможно)
Раньше для выполнения действия A
n раз я использовал threading.ThreadPoolExecutor, но я не уверен, как мне правильно это обрабатывать с веб-сервером. работает параллельно.
Моя идея была примерно такой:
start_server()
tpe = ThreadPoolExecutor(max_workers=10)
while True:
if order_list:
new_order = order_list.pop(0)
tpe.submit(my_action, new_order) # my_action is my desired function
sleep(5)
Теперь этот фрагмент кода, конечно, блокируется, и я надеялся, что веб-сервер продолжит работать параллельно, в то время как я запускаю while-l oop.
Возможна ли такая установка? Может быть, мне нужно использовать другие модули? Любая помощь с благодарностью!