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
应该异步工作,即使队列为空,对象也应该是活动的。
解决方案
推荐阅读
- laravel - 您的锁定文件不包含兼容的软件包集。请运行作曲家更新。在 laravel 8 中安装 metronic 主题时
- ubuntu - 在 Ubuntu 上设置 DISPLAY 变量
- android - Flutter在手机的assets文件夹中的assets存放在哪里?
- ios - 正则表达式字符串与 Swift 中的输入值不匹配
- docker - 与 pgadmin4 docker 容器共享本地 SSH 密钥;没有权限
- javascript - 我的所有浏览器都有控制台问题,javascript 文件没有在我的任何浏览器中打开
- excel - 用数据填充范围
- resteasy - 在客户端的 @Path 注释中使用查询参数
- http - go中http标头中的请求进度
- c# - ASP.Net MVC C# 中的 Dragonpay 支付方式