協程 基於TCP的高併發通訊

2022-08-15 02:57:09 字數 1586 閱讀 5861

from gevent import

monkey;monkey.patch_all()

from socket import *

import

gevent

defsever(ipport):

s =socket(af_inet,sock_stream)

s.setsockopt(sol_socket,so_reuseaddr,1)

s.bind(ipport)

s.listen(5)

while

true:

cnn, addr =s.accept()

print('

%s is from %s

'%(cnn, addr))

gevent.spawn(talk, cnn,addr)

s.close()

deftalk(cnn,addr):

while

true:

try:

res = cnn.recv(1024).decode('

utf-8')

cnn.send(res.upper().encode(

'utf-8'))

except exception:break

cnn.close()

if__name__ == '

__main__':

ipport = ('

127.0.0.1

', 8080,)

sever(ipport)

sever

from socket import *

from threading import

thread

defclient(ipport):

c =socket(af_inet,sock_stream)

c.connect(ipport)

while

true:

try:

#res = input('>>').strip()

#if not res:continue

res = '

hello

'c.send(res.encode(

'utf-8'))

ree = c.recv(1024).decode('

utf-8')

print

(ree)

except exception:break

c.close()

if__name__ == '

__main__':

ipport = ('

127.0.0.1

',8080,)

for i in range(500):

t = thread(target=client,args=(ipport,))

t.start()

client

由於協程的作用及其輕量化,使高併發(看起來是高併發)實現起來簡單快捷,至少我的電腦(8核核多了也沒用,只有乙個執行緒,10000個核也只能用乙個核執行)能開1024個執行緒去訪問服務端開的協程(客戶端之所以不用協程實驗是因為看不出效果,感覺跟序列似的)

python(33) 高併發 協程 Gevent

協程 實現單執行緒下的高併發。例如web高併發伺服器,nginx,nodejs,其實都是單執行緒,而如何實現上萬的高併發呢,用的就是協程。個人理解,協程快就是無論你啟動了幾個函式,整個程式的執行時長 最長的那個函式時長 整個程式,無論你啟動幾個函式,執行花費 只用了函式中最長的那個時間 2s 2.執...

python(33) 高併發 協程 Gevent

協程 實現單執行緒下的高併發。例如web高併發伺服器,nginx,nodejs,其實都是單執行緒,而如何實現上萬的高併發呢,用的就是協程。個人理解,協程快就是無論你啟動了幾個函式,整個程式的執行時長 最長的那個函式時長 整個程式,無論你啟動幾個函式,執行花費 只用了函式中最長的那個時間 2s 2.執...

使用協程方式編寫高併發的 WEB 服務

在 使用 acl 協程編寫高併發網路服務 中介紹了乙個使用 acl 協程庫編寫高併發網路服務的應用示例,本節將展示乙個稍微複雜些且更具實際意義的例子 基於協程的 web 伺服器程式。下面首先展示這個 web 伺服器程式 include lib acl.h acl 基礎庫標頭檔案 include fi...