threading的多執行緒併發
對比多程序併發:
* 消耗資源較少
* 執行緒應該更注意共享資源的操作
* 在python中應該注意gil問題,網路延遲較高,執行緒併發也是一種可行的方法
實現步驟:
1. 建立套接字,繫結監聽
2. 接收客戶端請求,建立新的執行緒
3. 主線程繼續接收其他客戶端連線
4. 分支執行緒啟動對應的函式處理客戶端請求
5. 當客戶端斷開,則分支執行緒結束
cookie:
import traceback
traceback.print_exc()
功能:更詳細的列印異常資訊
#多執行緒構建伺服器
from socket import *
import os,sys
from threading import *
import traceback
host = '0.0.0.0'
port = 8888
addr = (host,port)
#客戶端處理函式
def handler(connfd):
print('connect from:{}'.format(connfd.getpeername))
while true:
data = connfd.recv(1024)
if not data:
break
print(data.decode())
connfd.send(b'receive request')
connfd.close()
#建立套接字
s = socket()
s.setsockopt(sol_socket,so_reuseaddr,1)
s.bind(addr)
s.listen(5)
#等待客戶端請求
while true:
try:
connfd,addr = s.accept()
except keyboardinterrupt:
s.close()
sys.exit('服務端退出')
except exception as e:
traceback.print_exc()
continue
#若不傳遞connfd將導致多執行緒共同使用全域性變數connfd
t = thread(target = handler,args = (connfd,))
t.setdaemon(true)
t.start()
# join函式是阻塞函式不能寫在這裡
# t.join()
# 若在最後迴圈退出,則很久之內都不會執行故使用setdaemon給系統處理退出的執行緒
併發伺服器模型 多執行緒伺服器
coding utf 8 from socket import from threading import thread from time import sleep 處理客戶端的請求並執行事情 def dealwithclient newsocket,destaddr while true rec...
構建多執行緒的伺服器
簡單的來說,就是同時有多個執行緒一起執行,而不同的執行緒可以執行不同的操作。舉個例子,乙個影象處理工具,可以用滑鼠一邊移 像,一邊用快捷鍵縮放影象,此時,移 像 縮放影象就是不同的執行緒來處理的,如果不支援多執行緒而是單執行緒的,那麼只能挨個操作了。而對於伺服器來說,多執行緒的這個特性太有用了,因為...
多執行緒與併發伺服器設計 23 2
非同步i o 常見併發伺服器方案 linux能同時啟動多少個執行緒?對於 32 bit linux,乙個程序的位址空間是 4g,其中使用者態能訪問 3g 左右,而乙個執行緒的預設棧 stack 大小是 10m,心算可知,乙個程序大約最多能同時啟動 300 個執行緒左右。多執行緒能提高併發度嗎?如果指...