協程:又叫微執行緒
python的多執行緒沒法利用多核,只能用乙個核去切換,沒辦法實現真正的並行效果。多執行緒的意義,對於io密集型是有意義的。大部分處理都是io的,多執行緒是可以解決大多數情況的。但是解決不了並行的多程序。
協程:非搶占式的程式,執行緒和程序都是搶占式的。協程也是要切換的,不過這種切換是我們來規定的,在於我們的需求。
使用者態的切換。
協程主要解決的問題也是io操作,比多執行緒效果好得多。計算密集型的,協程的效果也不是很好。
優點:沒有切換,沒有鎖一說,因為協程的本質就是乙個執行緒
缺點:不能用多核,還得靠多程序+協程模式才能解決併發問題
import requests,time,gevent
starttime=time.time()
def f(url):
print('get the url:',url)
res=requests.get(url)
data=res.text
print('%s bytes' % len(data))
with open('new','w',encoding='utf8') as t:
t.write(data)
# f('')
# f('')
# f('')
# f('')
gevent.joinall([
gevent.spawn(f,''),
gevent.spawn(f,''),
gevent.spawn(f,''),
gevent.spawn(f,'')
])print('cost time',time.time()-starttime)
多協程爬蟲
要實現非同步的爬蟲方式的話,需要用到多協程。同步的爬蟲方式爬取這8個 import requests,time 匯入requests和time start time.time 記錄程式開始時間 url list 把8個 封裝成列表 for url in url list 遍歷url list r r...
Python協程理解 基於爬蟲舉例
當前 在工作當中沒有太大的含義,但是對於大家理解協程的基礎概念是相當有好處的 協程最直接的可以理解為程式當中乙個沒有返回的功能塊兒 我們之前有學過多執行緒,所謂的多執行緒不論是非同步併發,還是併發強調的時候將功能放到不同的執行緒上分別執行的過程 但是協程不是這樣的,協程強調的是在同乙個執行緒上進行執...
python協程與非同步協程
在前面幾個部落格中我們一一對應解決了消費者消費的速度跟不上生產者,浪費我們大量的時間去等待的問題,在這裡,針對業務邏輯比較耗時間的問題,我們還有除了多程序之外更優的解決方式,那就是協程和非同步協程。在引入這個概念之前我們先看 看這個圖 從這個我們可以看出來,假如來了9個任務,即使我們開了多程序,在業...