关于在中开发基于tcp的线程管理的建议

2024-05-15 02:20:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我对线程的知识是有限的,我正在寻找如何完成类似以下任务的指针:

user connects to admin port (telnet remote.host 12111), and issues "SET LOGGING DEBUG", or "STOP SERVICE".

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

或者,提供这样一个特性的python应用程序列表将是一个很大的帮助。我很乐意翻阅代码,以便重用他们的想法。在


Tags: 数据用户命令服务器脚本信息应用程序目标
3条回答

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

multiprocessing is a package that supports spawning processes using an API similar to the threading module. The multiprocessing package offers both local and remote concurrency, effectively side-stepping the Global Interpreter Lock by using subprocesses instead of threads. Due to this, the multiprocessing module allows the programmer to fully leverage multiple processors on a given machine. It runs on both Unix and Windows.

The GIL is controversial because it prevents multithreaded CPython programs from taking full advantage of multiprocessor systems in certain situations.

最简单的起点可能是Python的xmlrpclib。在

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

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

相关问题 更多 >

    热门问题