2009-11-08 79 views
2

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

我的音频服务器广播音频数据到不同的监听器的客户,如果他们中的一些不能下载的时间音频,这意味着,我的服务器保持的音频数据,直到收到听众。而且,我的音频服务器是一台广播服务器,它接收音频数据并将它们发送到不同的客户端,我通过Twisted将这些数据复制到不同的缓冲区中,即使它们是相同的音频片段。

我想减少内存使用的使用,所以我需要知道的是由客户端接收的音频时,这样我可以决定什么时候丢弃一些缓慢的客户。但我不知道如何用Twisted实现这一点。有没有人有想法?

而且还有什么我可以做,以减少内存使用量的使用情况如何?

谢谢。 Victor Lin。

+0

这是我做的另一篇文章,最后我找到原因http://stackoverflow.com/questions/2100192/how-to-find-the-source-of-increasing-memory-usage-of-a-双绞线服务器/ 2229010#2229010 – 2010-02-09 12:46:04

回答

2

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

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

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

-5

确保您使用Python的garbage collector,然后再通过并删除不使用的变量。