2010-11-14 57 views
1

我已经构建了一个非常简单的TCP服务器(在python中),当查询时,返回运行所述脚本的主机OS的各种系统级统计信息。关于开发基于tcp的线程管理界面的建议

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

我线程的知识是有限的,而且我在寻找如何实现类似下面的东西指针:

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

我的困惑涉及到我将如何去共享线程之间的数据。如果服务在例如线程1上启动,我如何从该线程访问数据?

或者,提供这种功能的python应用程序列表将非常有帮助。我很乐意捅过代码,以重用他们的想法。

回答

0

也许最简单的出发点就是Python的xmlrpclib。

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

1

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

0

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

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

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