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

kjo*_*876 1 python sockets networking

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

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

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

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

谢谢!

Eli*_*sky 5

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

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

此模块提供了编写异步套接字服务客户端和服务器的基本基础结构.

只有两种方法让一个程序在一个处理器上做"一次不止一件事."多线程编程是最简单和最流行的方法,但还有另一种非常不同的技术,它可以让你几乎没有多线程的所有优点,没有实际使用多线程.如果您的程序主要受I/O限制,那么它真的很实用.如果您的程序受处理器限制,那么先发制人的预定线程可能就是您真正需要的.但是,网络服务器很少受处理器限制.

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