首页 > 解决方案 > 如何接受请求并在不同的线程中执行它们?

问题描述

我有一个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应该异步工作,即使队列为空,对象也应该是活动的。

标签: python-3.xmultithreading

解决方案


推荐阅读