協程實現socket併發程式設計

2022-06-22 22:42:11 字數 1246 閱讀 7128

在python中多執行緒其實是被弱化了,因為由於gil的原因,同一時間只有乙個執行緒能訪問cpu,即使你的cpu是多核的在python中因為多執行緒被弱化了,所以協程顯的重要,能夠在乙個執行緒中提高cpu的利用率,乙個執行緒中開啟500個協程,4核cpu開啟20個執行緒效率不錯,4核cpu開啟5個程序會比較不錯,所以利用協程一共可以實現50000的併發達到不錯

所以跟socket網路程式設計方面和爬蟲方面,併發用到協程會不錯

1.server.py

from gevent import

monkey

monkey.patch_all()

#有了該猴子補丁後,當任務發生io事件時,協程任務就會切換

import

gevent

import

socket

defdealmautual(conn):

'''協程任務

與client的會話

:return:

'''conn.send(b

'hello')

msg = conn.recv(1024).decode('

utf-8')

print

(msg)

conn.close()

if__name__ == '

__main__':

sk =socket.socket()

sk.bind((

'127.0.0.1

', 8080))

sk.listen()

while 1:

conn, addr = sk.accept() #

阻塞等待客戶端連線上來

gevent.spawn(dealmautual, conn) #

當有乙個客戶端連上來後則非同步建立乙個協程任務,非同步執行協程任務,當協程任務遇到io後,則會發生協程的任務切換

2.client.py

import

socket

sk =socket.socket()

sk.connect((

'127.0.0.1

', 8080))

msg = sk.recv(1024).decode('

utf-8')

print

(msg)

sk.send(b

'my client')

sk.close()

併發程式設計 協程

一 協程介紹 協程 是單執行緒下的併發,又稱微執行緒,纖程。英文名coroutine。一句話說明什麼是執行緒 協程是一種使用者態的輕量級執行緒,即協程是由使用者程式自己控制排程的。需要強調的是 對比作業系統控制線程的切換,使用者在單執行緒內控制協程的切換 優點如下 缺點如下 總結 必須在只有乙個單執...

python 併發程式設計 協程 協程介紹

協程 是單執行緒下的併發,又稱微執行緒,纖程。英文名coroutine。一句話說明什麼是執行緒 協程是一種使用者態的輕量級執行緒,即協程是由使用者程式自己控制排程的 需要強調的是 1.python的執行緒屬於核心級別的,即由作業系統控制排程 如單執行緒遇到io或執行時間過長就會被迫交出cpu執行許可...

Python 併發程式設計(協程)

本章節主要介紹,使用單執行緒實現併發,即只用乙個主線程 很明顯可利用cpu只有乙個 為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態 單執行緒下併發稱為 協程 特點 缺點 gevent 是乙個...