套接字 Python Select 和多处理
Socket Python Select and Multiprocessing
我想要一些关于套接字的解释...
假设我创建了一个用于聊天的套接字(服务器和客户端),这个套接字的每个客户端都会从服务器接收数据并将数据发送到服务器,服务器将同时向所有客户端发送数据。服务器如何同时接受所有连接?
我知道模块 "socket" 有 3 种方法:
- 使用模块 "threading" 创建更多线程,但这不是最好的方法
- 使用模块 multiprocessing 创建更多进程
- 使用模块select
最好的方法是什么?
使用 select 和使用多处理有什么区别?
只是基于我在套接字编程方面非常有限的经验的一些概括。
它们是两种完全不同的IO处理方式。
select常用于实现非阻塞IO,一般在单线程中。 Tornado 是一个成熟的框架示例。
http://www.tornadoweb.org/en/stable/,Tornado 使用 select(或内部等效)
使用 select 的优点是不必担心 multithreaded/process 编程,使用 os 通知文件描述符更改允许单个线程处理数百或数千或数万个打开的套接字。
线程也是处理 io 的好方法。因为线程不会被 cpu 绑定,所以生成许多 io 绑定线程通常是可以接受的并且性能良好。由于线程将花费 most 的时间等待 IO,因此 * 应该不会有太多开销。
我肯定会看龙卷风,因为它有一个创建起来很简单的聊天示例
在 google
上的 python 中有很多关于聊天服务器、高性能 python 网络服务器和套接字编程的示例、博客和教程
我想要一些关于套接字的解释... 假设我创建了一个用于聊天的套接字(服务器和客户端),这个套接字的每个客户端都会从服务器接收数据并将数据发送到服务器,服务器将同时向所有客户端发送数据。服务器如何同时接受所有连接? 我知道模块 "socket" 有 3 种方法:
- 使用模块 "threading" 创建更多线程,但这不是最好的方法
- 使用模块 multiprocessing 创建更多进程
- 使用模块select
最好的方法是什么? 使用 select 和使用多处理有什么区别?
只是基于我在套接字编程方面非常有限的经验的一些概括。
它们是两种完全不同的IO处理方式。
select常用于实现非阻塞IO,一般在单线程中。 Tornado 是一个成熟的框架示例。 http://www.tornadoweb.org/en/stable/,Tornado 使用 select(或内部等效)
使用 select 的优点是不必担心 multithreaded/process 编程,使用 os 通知文件描述符更改允许单个线程处理数百或数千或数万个打开的套接字。
线程也是处理 io 的好方法。因为线程不会被 cpu 绑定,所以生成许多 io 绑定线程通常是可以接受的并且性能良好。由于线程将花费 most 的时间等待 IO,因此 * 应该不会有太多开销。
我肯定会看龙卷风,因为它有一个创建起来很简单的聊天示例
在 google
上的 python 中有很多关于聊天服务器、高性能 python 网络服务器和套接字编程的示例、博客和教程