【问题标题】:Whats the best way to implement python TCP client?实现python TCP客户端的最佳方法是什么?
【发布时间】:2015-04-17 17:53:23
【问题描述】:

我需要编写执行多项任务的 python 脚本:

  1. 从控制台读取命令并通过tcp/ip发送到服务器

  2. 接收服务器响应,处理并输出到控制台。

创建这样一个脚本的最佳方法是什么?在与主线程中的用户交互时,我是否必须创建单独的线程来监听服务器响应?有什么好的例子吗?

【问题讨论】:

  • 为什么需要两个线程?当上一个命令完成时,您是否关心来自服务器的消息?服务器是否关心用户在执行命令时输入的内容?我觉得这两项工作不需要同时进行
  • 如何同时从控制台接收来自服务器和用户命令的消息?
  • 你需要吗?服务器是否曾经发送过不响应命令的内容?它不能在命令和响应之间交替吗?即while True: get_cmd(); send_to_server(); dispay_response()
  • 是的,有时服务器会发送一些不是之前用户输入的响应
  • 你需要小心控制台 - 如果在用户键入命令的一半时服务器有输出要打印会发生什么?

标签: python multithreading tcpclient


【解决方案1】:

要求最佳方式代码示例是相当离题的,但这太长了,不能作为评论。

构建这些终端模拟器应用程序的一般方法有以下三种:

  • 多进程 - 良好的旧 Unix cufork 一起工作的方式
  • 多线程 - 上述变体,使用轻型线程代替进程
  • 使用 select 系统调用和多路复用 io。

一般来说,前两种方法被认为是更直接的编码方式,其中一个线程(或进程)处理上行通信,而另一个处理下行通信。第三个虽然代码更棘手,但通常被认为更有效

由于 Python 支持多线程、多处理和select 调用,因此您可以选择任何方法,但多线程比多处理稍有偏好,因为线程比进程轻,我看不出使用进程的理由。

只听我的意见

除非您正在编写一个模型以便稍后用较低级别的语言重写它,否则我认为性能不是关键问题,我的建议是在这里使用线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    相关资源
    最近更新 更多