亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python爬蟲中生產者和消費者模式是什么

發布時間:2020-08-04 13:57:18 來源:億速云 閱讀:216 作者:清晨 欄目:編程語言

這篇文章將為大家詳細講解有關Python爬蟲中生產者和消費者模式是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

認識生產者和消費者模式

生產者和消費者是多線程中很常見的一個問題。產生數據的模塊,我們稱之為生產者,而處理數據的模塊,就稱為消費者。但是單單只有生產者和消費者顯然還是不夠的,一般來說,我們還有一個緩沖區,抽象出來的流程如下圖所示。

Python爬蟲中生產者和消費者模式是什么

將這個過程以實際例子來說明:

假如我們是一個生產辣條的廠家,我們生產出來的辣條肯定是一箱一箱地放在倉庫里面,然后賣出去給消費者。【不再考慮經銷商環節】

1.我們把一箱一箱的辣條生產好。——>>>相當于生產者制造數據

2.我們把辣條放到倉庫中。——>>>相當于將數據放到緩沖區

3.我們把辣條給取出來。——>>>相當于把數據從緩沖區取出

4.我們把取出的辣條賣給消費者吃掉。——>>>相當于從緩沖區出來的數據經過了處理

應用于爬蟲

Python爬蟲中生產者和消費者模式是什么

生產者:不斷產生待爬取的url。【比如需要下載圖片,此時就需要不斷獲取圖片的url】

緩沖區:將獲取到的url進行儲存。

消費者:對生產者獲取到的url從緩沖區拿出來,然后發起請求。【相當于對下載url】

對于通用爬蟲(單線程)來說,我們拿到一個圖片的url,然后就進行下載,效率太低。

對于異步爬蟲(多線程)來說,我們可以同時從緩沖區取出多個圖片的url,然后一次多張下載。

Queue隊列線程安全

當采用多線程的生產者和消費者模式時,生產者生產出來的數據【對應于爬蟲爬取到的圖片url】,將其儲存于緩沖區,【緩沖區即全局變量】,此時必然面臨一個問題,就是數據不同步【數據錯亂】等問題,后續再執行操作就存在一定問題了。

再舉個例子:

比如有一個列表為A=[0],此時去修改里面的值,修改實際上分為兩步:第一步是選取到那個元素,第二步才是賦值修改。如果說是多線程來執行這個操作,就有可能會發生一些意想不到的錯誤。比如第一個線程要賦值為1,第二個線程要賦值為2。按照我們正常的理解,最終結果應該是2,但是對于多線程來說,它的結果也有可能是1。

考慮這一種情況,當線程1選定了A[0],此時切換到了線程2,然后線程2選定了A[0],并且執行了下一步賦值的操作,這樣就先將A這個列表賦值為2了,接著再次切換到了線程1,此時線程1完成賦值(因為在前面已經選定),此時最終結果變為1。所以多線程總是會面臨各種數據不安全的問題。

Python爬蟲中生產者和消費者模式是什么

解決方案:

1.加鎖機制(已經講過)

2.Queue隊列線程安全。

什么是Queue隊列線程安全?

類似列表,但又不是列表。

在Python中提供了同步的、線程安全的隊列類,這些隊列都實現了鎖原語,能夠在多線程中直接使用。可以使用隊列來實現線程間的同步,即保證數據不會亂掉。

Python爬蟲中生產者和消費者模式是什么

關于Python爬蟲中生產者和消費者模式是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

来安县| 社旗县| 沐川县| 灵武市| 遂平县| 清水县| 富顺县| 南澳县| 潜山县| 丹阳市| 三河市| 金塔县| 崇明县| 曲周县| 上思县| 吉木萨尔县| 永胜县| 泽普县| 昌平区| 高青县| 昭通市| 循化| 金乡县| 宝应县| 贵溪市| 富源县| 阳城县| 云霄县| 尉氏县| 阿城市| 邹城市| 栾川县| 高邑县| 资讯| 襄樊市| 阿城市| 峡江县| 安国市| 漠河县| 恭城| 青浦区|