Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
套接字Python选择和多处理_Python_Sockets_Select_Multiprocessing_Python Multiprocessing - Fatal编程技术网

套接字Python选择和多处理

套接字Python选择和多处理,python,sockets,select,multiprocessing,python-multiprocessing,Python,Sockets,Select,Multiprocessing,Python Multiprocessing,我想要一些关于插座的解释。。。 假设我创建一个用于聊天的套接字(服务器和客户端),该套接字的每个客户端都将从服务器接收数据并向服务器发送数据,服务器将同时向所有客户端发送数据。服务器如何同时接受所有连接? 我知道模块“插座”有3种方法: 使用“线程化”模块创建更多线程,但这不是最好的方法 使用模块多处理创建更多进程 使用“选择”模块 最好的方法是什么? 使用select和使用multiprocessing之间有什么区别?根据我在socket编程方面的有限经验,我只做了一些概括 它们是处理IO的两

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

  • 使用“线程化”模块创建更多线程,但这不是最好的方法
  • 使用模块多处理创建更多进程
  • 使用“选择”模块
  • 最好的方法是什么?
    使用select和使用multiprocessing之间有什么区别?

    根据我在socket编程方面的有限经验,我只做了一些概括

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

    select通常用于实现非阻塞IO,通常在单个线程中。Tornado是一个成熟的框架例子。 ,Tornado使用select(或内部等效工具)

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

    线程也是处理io的一种很好的方法。由于该线程不受cpu限制,因此生成许多io限制的线程通常是可以接受的。因为线程大部分时间都在等待IO,所以开销应该不会太大

    我想看看tornado,因为它有一个聊天示例,创建起来很简单

    在google上有许多聊天服务器、performant python Web服务器和python套接字编程的示例、博客和教程