欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

對(duì)python多線程與global變量詳解

 更新時(shí)間:2018年11月09日 11:07:52   作者:hsj_csdn  
今天小編就為大家分享一篇對(duì)python多線程與global變量詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

今天早上起來(lái)寫(xiě)爬蟲(chóng),基本框架已經(jīng)搭好,添加多線程爬取功能時(shí),發(fā)現(xiàn)出錯(cuò):

比如在下載文件的url列表中加入200個(gè)url,開(kāi)啟50個(gè)線程。我的爬蟲(chóng)…竟然將50個(gè)url爬取并全部命名為0.html,也就是說(shuō),最后的下載結(jié)果,是有1個(gè)0.html(重復(fù)的覆蓋了),還有1-150。下面是我的代碼:

x = str(theguardian_globle.g)
 #x為給下載的文件命的名
 filePath = "E://wgetWeiBao//"+x+".html"
 try:
  wget.download(url,filePath)
  theguardian_globle.g+=1
  print x+" is downloading..."
 
 except:
  print "error!"
#這個(gè)是全局變量g的定義
global g
 
g = 0

后來(lái)終于發(fā)現(xiàn)問(wèn)題:多線程+全局變量是個(gè)危險(xiǎn)的組合,因?yàn)槌绦蛴卸鄠€(gè)線程在同時(shí)執(zhí)行,多個(gè)線程同時(shí)操作全局變量,會(huì)引起混亂。在多線程中操作全局變量,應(yīng)當(dāng)給該操作加鎖。

以下為修改后的代碼:

函數(shù):
 
def downLoad(url,num):
 x = str(num)
 filePath = "E://wgetWeiBao//"+x+".html"
 try:
  wget.download(url,filePath)
  print x+" is downloading..."
 
 except:
  print "error!"
多線程消費(fèi)者_(dá)給操作全局變量的語(yǔ)句加鎖
class Cosumer(threading.Thread):
 def run(self):
  print('%s:started' % threading.current_thread())
 
  while True:
   global gCondition
   gCondition.acquire()
   while q.empty()==True:
    gCondition.wait()
   url = q.get()
   num = theguardian_globle.g
   theguardian_globle.g+=1
   gCondition.release()
   downLoad(url,num)

大功告成!

以上這篇對(duì)python多線程與global變量詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python爬蟲(chóng)超時(shí)的處理的實(shí)例

    python爬蟲(chóng)超時(shí)的處理的實(shí)例

    今天小編就為大家分享一篇python爬蟲(chóng)超時(shí)的處理的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python第三方包之DingDingBot釘釘機(jī)器人

    Python第三方包之DingDingBot釘釘機(jī)器人

    這篇文章主要介紹了Python第三方包之DingDingBot釘釘機(jī)器人,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • django haystack實(shí)現(xiàn)全文檢索的示例代碼

    django haystack實(shí)現(xiàn)全文檢索的示例代碼

    這篇文章主要介紹了django haystack實(shí)現(xiàn)全文檢索的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Pandas實(shí)現(xiàn)Dataframe的合并

    Pandas實(shí)現(xiàn)Dataframe的合并

    我們知道,在使用pandas處理數(shù)據(jù)的時(shí)候,往往會(huì)需要合并兩個(gè)或者多個(gè)DataFrame的操作,那么本文就來(lái)介紹一下Pandas實(shí)現(xiàn)Dataframe的合并,感興趣的可以了解一下
    2021-06-06
  • Pandas庫(kù)中dataframe.corr()函數(shù)的使用

    Pandas庫(kù)中dataframe.corr()函數(shù)的使用

    dataframe.corr()是Pandas庫(kù)中的一個(gè)函數(shù),用于計(jì)算DataFrame中各列之間的相關(guān)系數(shù),本文主要介紹了Pandas庫(kù)中dataframe.corr()函數(shù)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • 詳解Python 關(guān)聯(lián)規(guī)則分析

    詳解Python 關(guān)聯(lián)規(guī)則分析

    這篇文章主要介紹了Python 關(guān)聯(lián)規(guī)則分析的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python中刪除文件的幾種方法實(shí)例

    Python中刪除文件的幾種方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Python中刪除文件的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python利用PaddleOCR制作個(gè)搜題小工具

    Python利用PaddleOCR制作個(gè)搜題小工具

    PaddleOCR是一個(gè)基于百度飛槳的OCR工具庫(kù),單模型支持中英文數(shù)字組合識(shí)別、豎排文本識(shí)別、長(zhǎng)文本識(shí)別。本文將利用PaddleOCR開(kāi)發(fā)一個(gè)搜題小工具,感興趣的可以了解一下
    2022-06-06
  • 基于python歷史天氣采集的分析

    基于python歷史天氣采集的分析

    今天小編就為大家分享一篇基于python歷史天氣采集的分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 如何在Pycharm中制作自己的爬蟲(chóng)代碼模板

    如何在Pycharm中制作自己的爬蟲(chóng)代碼模板

    當(dāng)有很多個(gè)個(gè)網(wǎng)站想要爬時(shí),每個(gè)爬蟲(chóng)的代碼不一樣,但有某種聯(lián)系,這個(gè)時(shí)候可以抽出一部分通用的代碼制成模板,減少代碼工作量。本文將具體介紹如何實(shí)現(xiàn)這一模板,需要的可以參考一下
    2021-12-12

最新評(píng)論