Python Tornado max_buffer_size 所有请求

Python Tornado max_buffer_size across all requests

我知道我可以在Tornado中设置max_buffer_size来限制可以上传到服务器的数据量。但我想做的是限制 所有 请求到我的 Tornado 服务器的数据总量。

例如,我同时有 500 个请求发送到我的 Tornado 服务器。每个请求上传 1MB 的数据。我希望我的 Tornado 服务器在所有请求中收到超过 150MB 的数据时拒绝连接。所以前 150 个请求将被接收,但接下来的 350 个请求将被 Tornado 拒绝,然后再将任何数据缓冲到内存中。

是否可以在 Tornado 中执行此操作?

目前没有办法像这样设置全局限制(但添加它可能是件好事)。

你目前能做的最好的事情是确保每个连接使用的内存保持较低:设置一个较低的默认值 max_body_size,对于需要接收更多数据的 RequestHandlers,使用 @stream_request_body 并在 prepare() 中调用 self.request.connection.set_max_body_size(large_value)。使用 @stream_request_body 装饰器,每个连接的内存使用将受到 chunk_size 参数的限制,而不是一次读取整个主体。然后在您的 data_recieved 方法中,您可以 await 从全局信号量进行分配以控制超出每个连接块大小的内存使用。