python套接字,什么是一次处理多个连接的最佳方法?

时间:2010-10-28 14:54:05

标签: python sockets networking

在python中一次处理大量连接的最佳方法是什么?我想到的第一种方式是线程,但是每个线程的RAM只有10MB,而且相当昂贵。

那么有什么其他方法可以同时处理大量连接?

我在没有使用线程的情况下看到的唯一问题是使用socket.recv()等待来自该protocolar客户端的数据,因此处理多个客户端的一个线程将无法工作。

但这就是我问这个问题的原因,是处理多个连接的最佳方法吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

如果你有大量的同时连接,那么线程的一个很好的替代方案是基于异步/事件的回调方法。

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

  

此模块提供基本功能   写作基础设施   异步套接字服务客户端   和服务器。

     

只有两种方法可以拥有   单个处理器上的程序“更多   一次只有一件事。“   多线程编程就是这样   最简单,最流行的方式   它,但还有另一个   不同的技术,让你   拥有几乎所有的优势   多线程,实际上没有   使用多个线程。是真的   只有你的程序是实用的   很大程度上是I / O约束。如果您的计划是   处理器绑定,然后先发制人   预定的线程可能是什么   你真的需要。网络服务器是   然而,很少受处理器束缚。

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