如何减少Twisted服务器的内存使用量?

时间:2009-11-08 16:13:09

标签: python memory-management twisted

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

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

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

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

感谢。 Victor Lin。

2 个答案:

答案 0 :(得分:2)

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

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

您可以在producer/consumer howto中更详细地了解此系统,这是Twisted文档的一部分。

答案 1 :(得分:-5)

确保您使用的是Python garbage collector,然后浏览并删除您未使用的变量。