簡體   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