您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

用Python进行客户端服务器编程?

用Python进行客户端服务器编程?

为每个连接生成新线程是一个 设计选择。如果您遇到许多人脉关系会怎样?

实际上,使用线程等待网络IO是不值得的。您的程序真的变得复杂,而且因为在线程中等待网络不会使您 *

以下文字来自python文档:

只有一种方法可以使程序在单个处理器上“一次完成一个以上的事情”。多线程编程是最简单,最流行的方法,但是还有另一种非常不同的技术,它使您几乎拥有多线程的所有优点,而无需实际使用多个线程。仅当您的程序在很大程度上受I / O约束时,这才是切实可行的。如果您的程序受处理器限制,那么抢占式预定线程可能正是您真正需要的。但是,网络服务器很少受处理器限制。

并且如果是处理器绑定服务器的情况。您可以随时离开另一个进程/线程来处理处理器。继续:

如果您的操作系统在其I / O库中支持select系统调用(几乎所有方法支持),则可以使用它同时处理多个通信通道;否则,您将无法使用它。在“ I / O”发生在“后台”时进行其他工作。尽管这种策略看似奇怪且复杂,尤其是乍一看,但它在很多方面都比多线程编程更易于理解和控制。

因此,不要使用线程,而要使用非阻塞输入/输出:将套接字收集在列表中,并使用带有select.select的事件循环来知道哪个套接字具有要读取的数据。在一个线程中执行该操作。

您可以选择像twisted这样的python异步网络框架来为您执行此操作。这样可以省去很多麻烦。Twisted的代码已经改进了很多年,涵盖了一些需要花费一些时间才能掌握的特殊情况。

:任何现有的异步IO库(如Twisted)都是python代码。您可以自己编写它,但是已经为您编写了。我不明白为什么您不使用那些库中的一个来编写自己的 代码,因为您是一个初学者。Networing IO很难做到正确。

python 2022/1/1 18:35:19 有214人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶