1#通過gevent實現單執行緒下的多socket併發 伺服器#通過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)
1#通過gevent實現單執行緒下的多socket併發 客戶端#通過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()
1#通過gevent實現單執行緒下的多socket併發 客戶端#併發多個sock連線#通過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模組
一 併發的本質 1 切換 2 儲存狀態 二 協程的概念 協程,又稱微執行緒,纖程。英文名coroutine。單執行緒下實現併發,使用者從應用程式級別控制單執行緒下任務的切換,注意一定是遇到i o才切。協程的特點在於是乙個執行緒執行,那和多執行緒比,協程有何優勢?最大的優勢就是協程極高的執行效率。因為...
簡單執行緒池實現
執行緒池可以處理多執行緒問題,只要將任務放到任務佇列中,執行緒池中的執行緒就會從佇列中取任務,以預設的優先順序開始執行,如果你的任務數大於正在工作的執行緒數,則執行緒池將會建立一根新的執行緒來輔助工作,但是永遠都不會超過執行緒池中線程的最大值。執行緒池的結構 pragma once include ...
簡單執行緒池實現
1.用於執行大量相對短暫的任務 2.當任務增加的時候能夠動態的增加執行緒池中線程的數量值到達乙個閾值 3.當任務執行完畢的時候,能夠動態的銷毀執行緒池中的執行緒 4.該執行緒池的實現本質上也是生產者與消費者模型的應用。生產者執行緒向任務佇列新增任務,一旦佇列有任務到來,如果有等待 執行緒就喚醒來執行...