python - Tornado 在多次连接下载后不会释放内存
问题描述
我在 Tornado 中释放内存时遇到了一些问题。我的处理程序下载部分大字节文件,并将其写入响应。但是并行请求越多,使用的内存就越多(这是合乎逻辑的)。但是请求结束后,内存不是空闲的!
我的代码:
import tornado.ioloop
import tornado.web
import tornado.gen
from tornado.httpclient import AsyncHTTPClient, HTTPRequest
AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient", max_clients=50)
class MainHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self):
url = "http://example.com/big_bytes_file"
request = HTTPRequest(url, headers={'Range': 'bytes=0-1048576'}, method='GET')
client = AsyncHTTPClient()
range_resp = yield client.fetch(request)
self.write(range_resp.body)
def make_app():
return tornado.web.Application([(r"/", MainHandler), ])
if __name__ == "__main__":
app = make_app()
app.listen(5000)
tornado.ioloop.IOLoop.current().start()
我所做的?
我看到启动应用程序后的内存使用情况(111 MB): 启动后的内存
发送一个请求。内存增加(114 MB):114 MB
发送来自 25 个用户的并行请求。内存 - 123 MB。
发送来自 50 个用户的并行请求。内存 - 153 MB。
发送来自 100 个用户的并行请求。内存 - 205 MB。
等待几分钟。记忆力不减。
这是为什么?:)
PS 举个例子,我们发送来自 80 个用户的请求。在此内存增加之后。之后,只有当用户超过 80 个时,内存才会增加。
解决方案
推荐阅读
- c++ - 在 Visual Studio 2019 中将自定义脚本文件与 C++ 项目一起使用
- php - 通过入口点标准使用前端控制器的 php72 动态 url 路由不起作用 Google App Engine [GAE]
- javascript - 如何根据创建日期过滤新对象?
- api - 生成动态 GraphQL Schema
- javascript - RenderItems 未在 return 内定义 no-undef
- html - HTML 视频不播放音频
- java - JSP 编译异常
- python - 用时间序列数据集训练 LSTM 模型后,如何预测未来数据或未知范围的数据?
- django - 如何通过通用 CreateView 建立对象实例化的多对多关系?
- r - 了解 dplyr 管道和汇总功能