【问题标题】:How can I reduce memory usage of a Twisted server?如何减少 Twisted 服务器的内存使用量?
【发布时间】:2009-11-08 16:13:08
【问题描述】:

我用 Python/Twisted 编写了一个音频广播服务器。它工作正常,但内存使用量增长太快!我认为这是因为某些用户的网络可能不够好,无法及时下载音频。

我的音频服务器将音频数据广播到不同听众的客户端,如果其中一些不能及时下载音频,这意味着我的服务器会保留音频数据,直到听众收到为止。更重要的是,我的音频服务器是一个广播服务器,它接收音频数据,并将它们发送到不同的客户端,我虽然 Twisted 将这些数据复制到不同的缓冲区,即使它们是相同的音频片段。

我想减少内存使用的使用,所以我需要知道客户端何时接收到音频,以便我可以决定何时丢弃一些慢客户端。但我不知道如何使用 Twisted 实现这一目标。有人知道吗?

我还能做些什么来减少内存使用量?

谢谢。 维克多·林。

【问题讨论】:

标签: python memory-management twisted


【解决方案1】:

你没有说,但我会假设你正在使用 TCP。很难编写一个基于 UDP 的系统,该系统会不断增加内存,因为客户端无法像您尝试发送数据那样快地接收数据。

TCP 具有内置的流量控制功能。如果接收方无法以您希望发送的速度读取数据,则此信息将提供给您,您可以更慢地发送。这与 BSD 套接字 API 一起工作的方式是 send(2) 调用将阻塞或将返回 0 以指示它不能向发送缓冲区添加任何字节。它在 Twisted 中的工作方式是通过一个称为“生产者和消费者”的系统。该系统的要点是您向消费者注册生产者。生产者对消费者反复调用 write。当消费者跟不上时,它会在生产者上调用pauseProducing。当消费者再次准备好接收更多数据时,它会在生产者上调用resumeProducing

您可以在producer/consumer howto(Twisted 文档的一部分)中详细了解该系统。

【讨论】:

    【解决方案2】:

    确保您使用的是 Python 的 garbage collector,然后检查并删除您不使用的变量。

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 2021-12-12
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多