繁体   English   中英

开发基于线程tcp的管理界面的建议

[英]Suggestions for developing a threaded tcp based admin interface

我构建了一个非常简单的TCP服务器(使用python),该服务器在查询时返回运行所述脚本的主机OS的各种系统级统计信息。

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

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

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

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

另外,提供此类功能的python应用程序列表也会有很大帮助。 为了重用他们的想法,我很乐意浏览代码。

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

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

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

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

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

GIL之所以引起争议,是因为它在某些情况下阻止多线程CPython程序充分利用多处理器系统。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM