from gevent importsevermonkey;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)
from socket import *clientfrom 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')
(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()
由於協程的作用及其輕量化,使高併發(看起來是高併發)實現起來簡單快捷,至少我的電腦(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...