(現(xiàn)在人工智能非常火爆,很多朋友都想學(xué),但是一般的教程都是為博碩生準(zhǔn)備的,太難看懂了。最近發(fā)現(xiàn)了一個非常適合小白入門的教程,不僅通俗易懂而且還很風(fēng)趣幽默。所以忍不住分享一下給大家。
? 點這里https://www.cbedai.net/ialexanderi可以跳轉(zhuǎn)到教程。)
?
鏈接:https://zhuanlan.zhihu.com/p/35179605
前言
關(guān)于網(wǎng)絡(luò)IO,同步,異步或者阻塞非阻塞永遠(yuǎn)是繞不開的話題。對于爬蟲這種IO密集型任務(wù),如果使用同步的方式進(jìn)行網(wǎng)絡(luò)請求,只要某個請求被阻塞了,則會造成整個流程時間的拖長,極大的降低了爬蟲的速度。這篇文章將介紹Python實現(xiàn)異步的其中一種方式,協(xié)程。并通過一些實例來說明協(xié)程的用法,以及好處。
基本知識
?
- 同步,異步
上文提到了同步與異步兩個術(shù)語,那么這兩者到底有什么區(qū)別呢?拿爬蟲場景舉個例子,比如說現(xiàn)在爬蟲需要點開十個鏈接,IO過程就是打開這十個鏈接的過程,CPU負(fù)責(zé)點擊鏈接的事件。顯而易見,點擊事件是非常快速的,而鏈接顯示的過程是比較緩慢的。同步IO就是爬蟲點擊了一個網(wǎng)址,等到獲得了徹底響應(yīng),才去點擊下一個網(wǎng)址。而異步IO就是爬蟲點擊了一個網(wǎng)址,不等獲得響應(yīng),立刻點擊下一個網(wǎng)址,最后等待響應(yīng)。兩者對比,異步的效率會更加高一些。
- IO密集與計算密集
IO密集型任務(wù)指的是磁盤IO或者網(wǎng)絡(luò)IO占主要的任務(wù),計算量很小,比如請求網(wǎng)頁,讀寫文件等。計算密集型任務(wù)指的是CPU計算占主要的任務(wù),比如圖形渲染中矩陣的運算(當(dāng)然現(xiàn)在都用GPU來完成)。
- 為什么不使用多線程
一般來說,解決并行事件的傳統(tǒng)思路可能是使用多線程。 但是多線程有幾個劣勢,第一是資源的開銷,第二是由于Python GIL(全局解釋鎖)的存在,多線程并非并行執(zhí)行,而是交替執(zhí)行,造成多線程在計算密集型任務(wù)的效率并不高。
- 協(xié)程是什么
協(xié)程的概念比較容易理解,它在單線程中,允許一個執(zhí)行過程A中斷,然后轉(zhuǎn)到執(zhí)行過程B,在合適的時間又可以轉(zhuǎn)回來,從而在單線程中實現(xiàn)了類似多線程的效果。而它有以下幾點優(yōu)勢:
?
-
- 數(shù)量理論上可以是無限個,因為是在單線程上進(jìn)行,沒有線程間的切換操作,效率比較高。
- 不需要“鎖”的機(jī)制,所有的協(xié)程都在一個線程中。
- 比較容易Debug,因為代碼是順序執(zhí)行。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
