簡體   English   中英

在另一個線程中運行在 python3 中的非阻塞套接字服務器

[英]Non-blocking socket server running in python3 in another thread

我想知道運行非阻塞 python3 套接字服務器的最佳方法。

我目前的代碼是:

def start(data):
    global sock
    try:

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind(("0.0.0.0", 8080))

        sock.listen(2)

        while True:
            #Does something
            client.close()

    except KeyboardInterrupt:
        kill()

def kill():
    sock.close()

在我的主程序中,我如何讓這個套接字服務器在后台運行(比如,在另一個線程中)而不阻塞主線程,這樣我就可以在創建端點后繼續在主線程中做其他事情? 例如,在我的主線程中,我希望能夠調用createEndpoint(data)然后調用一些其他函數等。

我如何讓這個……在后台運行……而不阻塞主線程,以便我可以繼續……?

這永遠不會在 Python3 中按原樣發生(自從 Guido ROSSUM 自己宣稱以來,很可能會保持這種狀態,除非首先確定 Python 解釋器的總體重新設計是可行的,然后再成功進行)

Python 及其所有線程都由一個壟斷的單例集中控制,這是 Python{2|3} GIL 鎖的中央唯一共享資源。

GIL 鎖步進主要重新序列化任何基於[CONCURRENT] py-threads 的執行,因此結果是純[SERIAL]交錯序列(正確 -主要避免任何並發,任何希望的越多- 具有[PARALLEL]形式 -代碼執行)。

這就是說,人們可能會跳出這個 Python 設計的限制並產生一個非 Pythonic 框架——比如ZeroMQ ,它獨立於它工作,有點“除了” python 解釋器,它會處理所有的信號/消息服務獨立於智能套接字(以代理行為為原型),完全擺脫了已知的 GIL 鎖重新序列化性能瓶頸(並且還允許利用協同定位和的混合多對-許多進程的通信架構)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM