久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

 藍(lán)天cipvfv9gyo 2017-10-08

首先我們來(lái)了解下python中的進(jìn)程,,線程以及協(xié)程!

從計(jì)算機(jī)硬件角度:

計(jì)算機(jī)的核心是CPU,,承擔(dān)了所有的計(jì)算任務(wù),。

一個(gè)CPU,在一個(gè)時(shí)間切片里只能運(yùn)行一個(gè)程序,。

從操作系統(tǒng)的角度:

進(jìn)程和線程,,都是一種CPU的執(zhí)行單元。

進(jìn)程:表示一個(gè)程序的上下文執(zhí)行活動(dòng)(打開(kāi),、執(zhí)行,、保存...)

線程:進(jìn)程執(zhí)行程序時(shí)候的最小調(diào)度單位(執(zhí)行a,執(zhí)行b...)

一個(gè)程序至少有一個(gè)進(jìn)程,,一個(gè)進(jìn)程至少有一個(gè)線程,。

并行 和 并發(fā):

并行:多個(gè)CPU核心,不同的程序就分配給不同的CPU來(lái)運(yùn)行,??梢宰尪鄠€(gè)程序同時(shí)執(zhí)行。

cpu1 -------------

cpu2 -------------

cpu3 -------------

cpu4 -------------

并發(fā):?jiǎn)蝹€(gè)CPU核心,,在一個(gè)時(shí)間切片里一次只能運(yùn)行一個(gè)程序,,如果需要運(yùn)行多個(gè)程序,則串行執(zhí)行,。

cpu1 ---- ----

cpu1 ---- ----

多進(jìn)程/多線程:

表示可以同時(shí)執(zhí)行多個(gè)任務(wù),,進(jìn)程和線程的調(diào)度是由操作系統(tǒng)自動(dòng)完成。

進(jìn)程:每個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間,,不同進(jìn)程之間的內(nèi)存空間不共享,。

進(jìn)程之間的通信有操作系統(tǒng)傳遞,導(dǎo)致通訊效率低,,切換開(kāi)銷(xiāo)大,。

線程:一個(gè)進(jìn)程可以有多個(gè)線程,所有線程共享進(jìn)程的內(nèi)存空間,,通訊效率高,,切換開(kāi)銷(xiāo)小。

共享意味著競(jìng)爭(zhēng),,導(dǎo)致數(shù)據(jù)不安全,,為了保護(hù)內(nèi)存空間的數(shù)據(jù)安全,引入'互斥鎖',。

一個(gè)線程在訪問(wèn)內(nèi)存空間的時(shí)候,,其他線程不允許訪問(wèn),,必須等待之前的線程訪問(wèn)結(jié)束,才能使用這個(gè)內(nèi)存空間,。

互斥鎖:一種安全有序的讓多個(gè)線程訪問(wèn)內(nèi)存空間的機(jī)制,。

Python的多線程:

GIL 全局解釋器鎖:線程的執(zhí)行權(quán)限,在Python的進(jìn)程里只有一個(gè)GIL,。

一個(gè)線程需要執(zhí)行任務(wù),,必須獲取GIL。

好處:直接杜絕了多個(gè)線程訪問(wèn)內(nèi)存空間的安全問(wèn)題,。

壞處:Python的多線程不是真正多線程,,不能充分利用多核CPU的資源。

但是,,在I/O阻塞的時(shí)候,,解釋器會(huì)釋放GIL。

所以:

多進(jìn)程:密集CPU任務(wù),,需要充分使用多核CPU資源(服務(wù)器,大量的并行計(jì)算)的時(shí)候,,用多進(jìn)程,。 multiprocessing

缺陷:多個(gè)進(jìn)程之間通信成本高,切換開(kāi)銷(xiāo)大,。

多線程:密集I/O任務(wù)(網(wǎng)絡(luò)I/O,,磁盤(pán)I/O,數(shù)據(jù)庫(kù)I/O)使用多線程合適,。

threading.Thread,、multiprocessing.dummy

缺陷:同一個(gè)時(shí)間切片只能運(yùn)行一個(gè)線程,不能做到高并行,,但是可以做到高并發(fā),。

協(xié)程:又稱(chēng)微線程,在單線程上執(zhí)行多個(gè)任務(wù),,用函數(shù)切換,,開(kāi)銷(xiāo)極小。不通過(guò)操作系統(tǒng)調(diào)度,,沒(méi)有進(jìn)程,、線程的切換開(kāi)銷(xiāo)。genvent,,monkey.patchall

多線程請(qǐng)求返回是無(wú)序的,,那個(gè)線程有數(shù)據(jù)返回就處理那個(gè)線程,而協(xié)程返回的數(shù)據(jù)是有序的,。

缺陷:?jiǎn)尉€程執(zhí)行,,處理密集CPU和本地磁盤(pán)IO的時(shí)候,,性能較低。處理網(wǎng)絡(luò)I/O性能還是比較高.

下面以這個(gè)網(wǎng)站為例,,采用三種方式爬取,。爬取前250名的電影。,。

https://movie.douban.com/top250?start=0

通過(guò)分析網(wǎng)頁(yè)發(fā)現(xiàn)第2頁(yè)的url start=25,,第3頁(yè)的url start=50,第3頁(yè)的start=75。因此可以得出這個(gè)網(wǎng)站每一頁(yè)的數(shù)局是通過(guò)遞增start這個(gè)參數(shù)獲取的,。

一般不看第一頁(yè)的數(shù)據(jù),,第一頁(yè)的沒(méi)有參考價(jià)值。

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

這次我們主要爬取,,電影名字跟評(píng)分。只是使用不同方式去對(duì)比下不同點(diǎn),,所以數(shù)據(jù)方面就不過(guò)多提取或者保存,。只是簡(jiǎn)單的將其爬取下打印出來(lái)看看。

第一:采用多進(jìn)程 , multiprocessing 模塊,。 當(dāng)然這個(gè)耗時(shí)更網(wǎng)絡(luò)好壞有關(guān),。在全部要請(qǐng)求都正常的情況下耗時(shí)15s多。

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

代碼還是自己敲吧

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

代碼還是自己敲吧

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站!有些難度

代碼還是自己敲吧

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

代碼還是自己敲吧

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

代碼還是自己敲吧

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站!有些難度

代碼還是自己敲吧

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

采用多線程時(shí),,耗時(shí)10.4s

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站!有些難度

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站!有些難度

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站!有些難度

采用協(xié)程爬取,,耗時(shí)15S,,

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站!有些難度

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站!有些難度

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

月薪25k的爬蟲(chóng)工程師帶你從零基礎(chǔ)分分鐘爬取一個(gè)網(wǎng)站,!有些難度

用了多進(jìn)程,多線程,,協(xié)程,,實(shí)現(xiàn)的代碼都一樣,沒(méi)有測(cè)試出明顯的那個(gè)好,!都不分上下,,可能跟網(wǎng)絡(luò),或者服務(wù)器配置有關(guān),。

但理論上來(lái)說(shuō)線程,,協(xié)程在I/O密集的操作性能是要高于進(jìn)程的。

確實(shí)有點(diǎn)難度,,不會(huì)的小伙伴還需努力,,謝謝閱讀!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多