Как принимать запросы и выполнять их в разных потоках?

#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 должны работать асинхронно, а объект должен
быть живым, даже когда очередь пуста.