2010-10-28 80 views
1

在Python中一次处理大量连接的最佳方式是什么?我想到的第一种方法是线程化,这种方法很有效,但每个线程的内存为10MB,而且相当昂贵。python sockets,什么是一次处理多个连接的最佳方式?

还有什么别的办法在那里一次处理大量的连接?

我看到不使用线程的唯一问题是,使用socket.recv()等待来自protocolar客户数据,因此一个线程处理几个客户是行不通的。

但是,这就是为什么我问这个问题,什么处理多个连接的最佳方式?

谢谢!

回答

5

一个很好的替代线程,如果你有一个真正的大量的并发连接,是进行回调的台异步/基于事件的方法。

的Python已经用于此目的的非常成熟和强大的库/框架 - Twisted。还有一个使用标准库asyncore模块的更简单的解决方案。从它的文档:

该模块提供了基本的基础设施 写 异步Socket服务客户 和服务器。

只有两种方法来对单个处理器的 程序做“同时更 超过一两件事。” 多线程编程是做 它 最简单,最普遍的方式,但也有是另一种非常 不同的技术,可以让你 有 多线程的几乎所有优点,而无需实际 使用多线程。这真的是 只适用于如果你的程序是 大部分I/O限制。如果你的程序是 处理器绑定,那么优先 调度线程可能是你真正需要的 。但是,网络服务器很少与处理器绑定。

通常,异步套接字服务器最近是一个非常热门的话题(node.js作为证人炒作),我相信你可以在网上找到很多有趣的资料。

相关问题