通過gevent實現單執行緒下的多socket併發

2022-02-24 13:13:23 字數 2529 閱讀 8256

1

#通過gevent實現單執行緒下的多socket併發 伺服器23

4#server side

5import

sys6

import

socket

7import

time

8import

gevent910

from gevent import

socket,monkey

11monkey.patch_all()

1213

14def

server(port):

15 s =socket.socket()

16 s.bind(('

0.0.0.0

', port))

17 s.listen(500)

18while

true:

19 cli, addr =s.accept()

20gevent.spawn(handle_request, cli)

2122

2324

defhandle_request(conn):

25try:26

while

true:

27 data = conn.recv(1024)

28print("

recv:

", data)

29conn.send(data)

30if

notdata:

31conn.shutdown(socket.shut_wr)

3233

except

exception as ex:

34print

(ex)

35finally:36

conn.close()

37if

__name__ == '

__main__':

38 server(8001)

#通過gevent實現單執行緒下的多socket併發 伺服器

1

#通過gevent實現單執行緒下的多socket併發 客戶端23

import

socket

45 host = '

localhost'#

the remote host

6 port = 8001 #

the same port as used by the server

7 s =socket.socket(socket.af_inet, socket.sock_stream)

8s.connect((host, port))

9while

true:

10 msg = bytes(input("

>>:

"),encoding="

utf8")

11s.sendall(msg)

12 data = s.recv(1024)13#

print(data)

1415

print('

received

', repr(data))

16 s.close()

#通過gevent實現單執行緒下的多socket併發 客戶端

1

#通過gevent實現單執行緒下的多socket併發 客戶端#併發多個sock連線23

import

socket

4import

threading56

defsock_conn():

78 client =socket.socket()

910 client.connect(("

localhost

",8001))

11 count =0

12while

true:13#

msg = input(">>:").strip()14#

if len(msg) == 0:continue

15 client.send( ("

hello %s

" %count).encode("

utf-8"))

1617 data = client.recv(1024)

1819

print("

[%s]recv from server:

" % threading.get_ident(),data.decode()) #

結果20 count +=1

21client.close()

2223

24for i in range(50):

25 t = threading.thread(target=sock_conn)

26 t.start()

#通過gevent實現單執行緒下的多socket併發 客戶端#併發多個sock連線

單執行緒實現併發 協程,gevent模組

一 併發的本質 1 切換 2 儲存狀態 二 協程的概念 協程,又稱微執行緒,纖程。英文名coroutine。單執行緒下實現併發,使用者從應用程式級別控制單執行緒下任務的切換,注意一定是遇到i o才切。協程的特點在於是乙個執行緒執行,那和多執行緒比,協程有何優勢?最大的優勢就是協程極高的執行效率。因為...

簡單執行緒池實現

執行緒池可以處理多執行緒問題,只要將任務放到任務佇列中,執行緒池中的執行緒就會從佇列中取任務,以預設的優先順序開始執行,如果你的任務數大於正在工作的執行緒數,則執行緒池將會建立一根新的執行緒來輔助工作,但是永遠都不會超過執行緒池中線程的最大值。執行緒池的結構 pragma once include ...

簡單執行緒池實現

1.用於執行大量相對短暫的任務 2.當任務增加的時候能夠動態的增加執行緒池中線程的數量值到達乙個閾值 3.當任務執行完畢的時候,能夠動態的銷毀執行緒池中的執行緒 4.該執行緒池的實現本質上也是生產者與消費者模型的應用。生產者執行緒向任務佇列新增任務,一旦佇列有任務到來,如果有等待 執行緒就喚醒來執行...