套接字Python选择和多处理

时间:2015-09-25 14:15:24

标签: python sockets select multiprocessing python-multiprocessing

我想要一些与套接字有关的解释...... 假设我创建了一个用于聊天的Socket(服务器和客户端),该套接字的每个客户端都将从服务器接收数据并将数据发送到服务器,服务器将同时向所有客户端发送数据。服务器如何同时接受所有连接? 我知道使用模块“socket”有3种方法:

  1. 使用模块“threading”创建更多线程,但这不是最好的方式
  2. 使用模块多处理创建更多流程
  3. 使用模块选择
  4. 最好的方法是什么? 使用select和使用多处理有什么区别?

1 个答案:

答案 0 :(得分:1)

基于我对套接字编程的非常有限的经验,只是一些普遍性。

它们是处理IO的两种完全不同的方式。

select经常用于实现非阻塞IO,通常在单个线程中。龙卷风是围绕这个框架的成熟范例。 http://www.tornadoweb.org/en/stable/,Tornado使用select(或内部等效的)

使用select具有不必担心多线程/进程编程的优点,使用os来通知文件描述符更改允许单个线程处理数百或数千或数万个打开的套接字。

线程也是处理io的好方法。因为线程不是cpu绑定的,所以通常可以接受并执行许多io绑定线程。由于线程将花费大部分时间等待IO,因此*不应该有很多开销。

我会看看龙卷风,因为它有一个简单的聊天示例来创建

在Google上的python中有许多聊天服务器的博客和教程,高性能的python web服务器和套接字编程