1

我已经构建了一个非常简单的 TCP 服务器(在 python 中),当被查询时,它返回运行所述脚本的主机操作系统的各种系统级统计信息。

作为我的实验和目标的一部分,以获得有关 python 及其可用库的知识;我想建立一个管理界面,a)绑定到单独的 TCP 套接字 b)接受来自 LAN 的远程连接和 c)允许连接的用户发出各种命令。Varnish 应用程序是一个提供类似管理功能的工具示例。

我对线程的了解有限,我正在寻找有关如何完成类似于以下内容的指示:

用户连接到管理端口(telnet remote.host 12111),并发出“SET LOGGING DEBUG”或“STOP SERVICE”。

我的困惑与我将如何在线程之间共享数据有关。如果该服务在例如 thread-1 上启动,我如何从该线程访问数据?

或者,提供此类功能的 Python 应用程序列表会很有帮助。我很乐意浏览代码,以便重用他们的想法。

4

3 回答 3

1

python 包括一些多线程服务器(SocketServer, BaseHTTPServer, xmlrpclib)。您可能还想看看 Twisted,它是一个强大的网络框架。

于 2010-11-14T19:11:33.980 回答
0

可能最简单的起点将涉及 Python 的 xmlrpclib。

关于线程,所有线程都可以读取 Python 程序中的所有数据;一次只有一个线程可以修改任何给定的对象,因此诸如列表和字典之类的原语将始终处于一致状态。涉及多个原语的数据结构(即类对象)需要多加注意。在线程之间进行协调的最安全方法是通过 Queue.Queue 之类的方式在线程之间传递消息/命令;这并不总是最有效的方法,但它不太容易出现问题。

于 2010-11-14T19:05:43.080 回答
0

最好使用多处理库,它提供了一整套并行计算的功能(队列、管道……)。由于GIL的限制,python 中的多线程效率不高。

multiprocessing 是一个使用类似于 threading 模块的 API 支持生成进程的包。multiprocessing 包提供本地和远程并发,通过使用子进程而不是线程来有效地避开全局解释器锁。因此,多处理模块允许程序员充分利用给定机器上的多个处理器。它可以在 Unix 和 Windows 上运行。

GIL 是有争议的,因为它阻止了多线程 CPython 程序在某些情况下充分利用多处理器系统。

于 2010-11-14T21:09:35.830 回答