在python中一次处理大量连接的最佳方法是什么?我想到的第一种方式是线程,但是每个线程的RAM只有10MB,而且相当昂贵。
那么有什么其他方法可以同时处理大量连接?
我在没有使用线程的情况下看到的唯一问题是使用socket.recv()等待来自该protocolar客户端的数据,因此处理多个客户端的一个线程将无法工作。
但这就是我问这个问题的原因,是处理多个连接的最佳方法吗?
谢谢!
答案 0 :(得分:5)
如果你有大量的同时连接,那么线程的一个很好的替代方案是基于异步/事件的回调方法。
Python已经有一个非常成熟和强大的库/框架用于此目的 - Twisted。使用标准库asyncore
模块还有一个更简单的解决方案。来自其文档:
此模块提供基本功能 写作基础设施 异步套接字服务客户端 和服务器。
只有两种方法可以拥有 单个处理器上的程序“更多 一次只有一件事。“ 多线程编程就是这样 最简单,最流行的方式 它,但还有另一个 不同的技术,让你 拥有几乎所有的优势 多线程,实际上没有 使用多个线程。是真的 只有你的程序是实用的 很大程度上是I / O约束。如果您的计划是 处理器绑定,然后先发制人 预定的线程可能是什么 你真的需要。网络服务器是 然而,很少受处理器束缚。
通常,异步套接字服务器最近是一个非常热门的话题(node.js炒作作为证人),我相信你可以在网上找到很多有趣的资料。