Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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 用于同步I/O的select()函数_Python_Multithreading_Sockets_Select_Io - Fatal编程技术网

Python 用于同步I/O的select()函数

Python 用于同步I/O的select()函数,python,multithreading,sockets,select,io,Python,Multithreading,Sockets,Select,Io,我正在尝试实现一个多线程服务器,它可以同时处理来自客户端的读/写操作。 服务器方法: 当每条消息以要发送消息的用户的名称开头,后跟“|”时,客户端将连接到服务器。它看起来是这样的:用户名数据 在收到数据后,服务器通过{socket:username}字典知道将数据发送到哪里。一切都很好,除了客户不能同时阅读和写作这一事实。我搜索了一个方法来处理这个问题,找到了select函数,但由于缺少示例,我无法将该函数集成到我的代码中 因此,我有两个问题: 选择功能是否应位于服务器端?这样会更有效率吗? 是

我正在尝试实现一个多线程服务器,它可以同时处理来自客户端的读/写操作。 服务器方法:

当每条消息以要发送消息的用户的名称开头,后跟“|”时,客户端将连接到服务器。它看起来是这样的:用户名数据

在收到数据后,服务器通过{socket:username}字典知道将数据发送到哪里。一切都很好,除了客户不能同时阅读和写作这一事实。我搜索了一个方法来处理这个问题,找到了select函数,但由于缺少示例,我无法将该函数集成到我的代码中

因此,我有两个问题:

选择功能是否应位于服务器端?这样会更有效率吗? 是否有人可以用一个简单的示例演示select方法在客户端的外观?
提前感谢

虽然select可以工作,但如果系统在select上被阻塞,您还需要使用线程来执行其他操作

看看glib的GIO图书馆。在那里,您可以将回调连接到要监视或执行的操作,例如来自客户端的“连接”


只需打开一个套接字,并使用其文件描述符挂起gio.add_手表。以下是关于使用GioChannel的内容。

非常感谢!我来看看。无论如何-我有线程,它工作没有任何问题,我只是想添加一个选择:如果每个人都以同样的方式编写代码,编程会很无聊:-虽然我在一些程序中使用线程,但我觉得使用事件驱动函数更舒服。