2010-11-14 23 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在某些情況下,採取多處理器系統的充分利用。