Python 异步网络编程实战
Python 異步網(wǎng)絡(luò)編程實戰(zhàn) - songcser - 掘金小冊
小冊介紹
第一部分是對 Python 協(xié)程的講解,從字節(jié)碼開始簡單講解了 Python 虛擬機(jī)的執(zhí)行過程,可以大體了解到 Python 協(xié)程的執(zhí)行過程。 第二部分是 Python 中 CS 架構(gòu)的概念講解和套接字 Socket 的基本用戶。 第三,四部分介紹了 Linux 下的五種 I/O 模型,并且使用 Python 的 select 模塊提供的接口,實現(xiàn) Select,Poll,Epoll 這三種模型的服務(wù)端。?這三部分分別介紹了 Python 中的協(xié)程,Socket,異步 I/O ,介紹的知識點比較多,能夠?qū)A(chǔ)知識有較深的理解?第五,六,七部分,講解的網(wǎng)絡(luò)爬蟲,從簡單的同步方法,到異步方法,最后結(jié)合協(xié)程,實現(xiàn)了一個即性能高又實現(xiàn)簡單的爬蟲。從簡單到復(fù)雜,一步一個實現(xiàn),最后完成一個性能強(qiáng)大的爬蟲,整個的講解比較清晰,能先循漸進(jìn)的理解整個實現(xiàn)過程?第八,九,十部分講解了 greenlet 實現(xiàn)協(xié)程,和 gevent 的大體結(jié)構(gòu)實現(xiàn)。這里可以了解 gevent 的大體實現(xiàn)過程,對于 gevent 的執(zhí)行過程有個大體的了解
你會學(xué)到什么?
近年來 Python 的發(fā)展的非常迅速,“簡單”、“高效”是 Python 吸引人的一大特色。在國內(nèi) Python 開發(fā)需求越來越大,Python 具有豐富強(qiáng)大的庫,現(xiàn)在各個領(lǐng)域都在廣泛使用,從 Web 開發(fā),到運維開發(fā),到機(jī)器學(xué)習(xí),到人工智能,Python 都有廣泛的應(yīng)用。學(xué)習(xí) Python 幾乎可以做任何事情,對自己的編程技能會有很大的提升
Python 是一種解釋性語言,語法簡單易用,上手較快,代碼優(yōu)雅。Python 的開發(fā)效率很高,也是大多數(shù)開發(fā)選擇 Python 的原因。但是 Python 的一個缺點就是性能比較差,對于 Web 開發(fā),性能是比較重要的指標(biāo)。而在解決性能方面,Python 出現(xiàn)了一些第三方異步網(wǎng)絡(luò)框架,如 Tornado,Twisted,Gevent,是比較流行異步框架。在 Python 官方也正式推出了 Asyncio 庫,在這個庫上面也出現(xiàn)了大量的 Web 框架。性能方面有了很大的提升。對于做 Web 開發(fā)的人員來說,可能會用到一些異步框架,但是不理解里面的實現(xiàn)原理。本課程講解 Python 異步實現(xiàn),從簡單的原理開始講解,其中會涉及到很多的知識點,協(xié)程,Socket,異步 I/O,爬蟲,會跟著一個一個的實驗,慢慢實現(xiàn)一個性能強(qiáng)大的爬。
第一節(jié)講解 Python 中函數(shù)的運行過程,將代碼編譯成字節(jié)碼,了解字節(jié)碼的運行流程和運行時調(diào)用棧。學(xué)習(xí)生成器函數(shù)的字節(jié)碼執(zhí)行過程,和整體的調(diào)用流程。
第二節(jié)介紹了 C/S 架構(gòu),講解 Socket 的實現(xiàn)過程,客戶端和服務(wù)端使用 Python 的實現(xiàn)過程。服務(wù)端不斷接收消息,客戶端不斷發(fā)送消息。
第三節(jié)和第四節(jié)主要講解 IO 多路復(fù)用,Linux下的五種 IO 模型和各自的原理特點。IO 多路復(fù)用主要有三種實現(xiàn)方式,使用 Python 的 select 模塊提供的接口,根據(jù)Select, Poll, Epoll(Kqueue)實現(xiàn)服務(wù)端的流程。
第五節(jié)是三個簡單的圖片爬取程序,分別使用了同步阻塞方式,多線程方式,I/O異步方式。三種實現(xiàn)方式都有各自的優(yōu)點和缺點。
第六節(jié)是講解使用回調(diào)方法的缺點,并且使用異步協(xié)程實現(xiàn)爬蟲,使用簡單的 Loop,Future,Task 等方式實現(xiàn)爬蟲,避免了大量的回調(diào)方法,結(jié)構(gòu)更加清晰一點。
第七節(jié)是講解 yield from 的使用方式和運行原理,使用 AsyncSocket 類將客戶端套接字及其方法進(jìn)行封裝,使用 yield from 做橋梁,調(diào)用者可以通過該語法結(jié)構(gòu)和子協(xié)程進(jìn)行數(shù)據(jù)交流。
第八節(jié)講解了異步事件庫,介紹Libevent,Libev,Libuv幾個事件庫的特點。pyuv 是為 libuv 提供了 python 模塊的接口,使用 pyuv 來實現(xiàn)異步爬蟲。
第九節(jié)實現(xiàn)了簡單的 EventLoop,Task 不斷驅(qū)動協(xié)程執(zhí)行,EventLoop 監(jiān)聽事件循環(huán),又不斷驅(qū)動 Task 執(zhí)行,Future 在協(xié)程的通道中傳輸數(shù)據(jù),幾個部分配合合作完成整個流程。
第十節(jié)簡單介紹了裝飾器,然后講解 asyncio.coroutine 的實現(xiàn)原理和實現(xiàn)異步爬蟲。最后在實現(xiàn)的異步爬蟲,使用 async 和 await 關(guān)鍵字。至此實現(xiàn)了一個簡單的 asyncio,對 asyncio 的幾個比較重要的模塊做了簡單的實現(xiàn),便于理解 asyncio 的原理。
第十一節(jié)講解 greenlet 的使用原理,greenlet 框架是 C 語言實現(xiàn)的一個 Python 擴(kuò)展,在協(xié)程調(diào)用時會有上下文的切換,屬于微線程,但比真正的線程資源占用少。使用 greenlet 代替 yield 協(xié)程實現(xiàn)爬蟲。
第十二節(jié)和第十三節(jié)講解 gevent 的實現(xiàn)流程。gevent是基于 greenlet 實現(xiàn)異步調(diào)用。實現(xiàn)Watch,Loop,Hub,Waiter 等幾個主要的模塊。能大體了解 gevent 內(nèi)部的實現(xiàn)過程。
第十四節(jié)講解 gevent 可以在不改變原有源代碼的基礎(chǔ)上,將同步執(zhí)行修改成異步執(zhí)行。使用 Monkey Patch 的方式實現(xiàn),對代碼改造影響很小,性能卻有大量提升。
通過本小冊的學(xué)習(xí),不僅僅是讓你掌握基本的 Python 異步開發(fā),同時會了解其中的實現(xiàn)原理,并且會接觸到 Python 字節(jié)碼,協(xié)程,Socket 編程,Liunx I/O 模型,爬蟲實現(xiàn),Gevent 原理。 將會接觸到很多的知識點,對于自己的知識面提升有很大的幫助。在以后的開發(fā)中,不僅知道實現(xiàn)的方法,還能知道實現(xiàn)的原理,這樣才能更快的開發(fā)出健壯的應(yīng)用。
- 本課程知識點較多,學(xué)習(xí)過程中,需要有一定的 Python 基礎(chǔ)
- 需要具有 Python 網(wǎng)絡(luò)編程基礎(chǔ)和爬蟲基礎(chǔ)
- 本課程結(jié)構(gòu)比較清晰,按照從易到難,先循漸進(jìn)講解整個實現(xiàn)過程
- 學(xué)習(xí)后可以提升大家對于知識的理解和掌握,在以后的開發(fā)中能有更加深入的理解
適宜人群
- 從事 Python Web 開發(fā)的技術(shù)人員
- 對 Python 感興趣,想了解 Python 異步實現(xiàn)過程
- 在開發(fā)過程中,想使用異步方式提升 Python 性能的開發(fā)者
?
?
總結(jié)
以上是生活随笔為你收集整理的Python 异步网络编程实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel提示stdole32.tlb的
- 下一篇: websocket python爬虫_p