#python-3.x #multithreading
#python-3.x #многопоточность
Вопрос:
У меня есть RequestHandler
класс, который будет создан и передан всем клиентам, и клиенты будут отправлять ему запросы через handle_new_request
метод. RequestHandler
Они также должны иметь возможность независимо выполнять эти запросы. Приведенный ниже запрос выглядит довольно обычным, но в приложении для обслуживания запроса может потребоваться время, поэтому я хочу выполнять запросы асинхронно.
from collections import deque
import time
class Request:
"""
Naive implementation of a request class.
"""
def __init__(self, req_name: str):
self.req_name = req_name
class RequestsHandler:
"""
Implementation for a naive requests handler class that accepts
requests from clients and serves them via a ThreadPool.
"""
def __init__(self, max_working_threads:int = 5):
self.max_working_threads = max_working_threads
self.request_queue = deque()
def handle_new_request(self, new_req: Request):
"""
Puts the new request made by a client into the request_queue.
:param new_req: Request made.
:return: None
"""
self.request_queue.append(new_req)
def serve_request(self):
"""
Pops a new request from the request queue and serves it.
:return: None
"""
new_request: Request = self.request_queue.popleft()
time.sleep(5)
print('served request %s'%new_request.req_name)
handle_new_request
и serve_request
методы класса RequestHandler
должны работать асинхронно, а объект должен
быть живым, даже когда очередь пуста.