[英]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.