日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 生产者和消费者模式_Python爬虫:生产者和消费者模式

發(fā)布時間:2025/3/15 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 生产者和消费者模式_Python爬虫:生产者和消费者模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

認(rèn)識生產(chǎn)者和消費者模式

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

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

假如我們是一個生產(chǎn)辣條的廠家,我們生產(chǎn)出來的辣條肯定是一箱一箱地放在倉庫里面,然后賣出去給消費者。【不再考慮經(jīng)銷商環(huán)節(jié)】

1.我們把一箱一箱的辣條生產(chǎn)好。——>>>相當(dāng)于生產(chǎn)者制造數(shù)據(jù)

2.我們把辣條放到倉庫中。——>>>相當(dāng)于將數(shù)據(jù)放到緩沖區(qū)

3.我們把辣條給取出來。——>>>相當(dāng)于把數(shù)據(jù)從緩沖區(qū)取出

4.我們把取出的辣條賣給消費者吃掉。——>>>相當(dāng)于從緩沖區(qū)出來的數(shù)據(jù)經(jīng)過了處理

應(yīng)用于爬蟲

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

緩沖區(qū):將獲取到的url進(jìn)行儲存。

消費者:對生產(chǎn)者獲取到的url從緩沖區(qū)拿出來,然后發(fā)起請求。【相當(dāng)于對下載url】

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

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

Queue隊列線程安全

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

再舉個例子:

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

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

解決方案:

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

2.Queue隊列線程安全。

什么是Queue隊列線程安全?

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

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

眾多python培訓(xùn)視頻,盡在python學(xué)習(xí)網(wǎng),歡迎在線學(xué)習(xí)!

本文轉(zhuǎn)自:https://blog.csdn.net/weixin_42830697/article/details/102957950

總結(jié)

以上是生活随笔為你收集整理的python 生产者和消费者模式_Python爬虫:生产者和消费者模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。