多執行緒併發構建基礎伺服器

2021-09-25 09:02:13 字數 1440 閱讀 7830

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 個執行緒左右。多執行緒能提高併發度嗎?如果指...