對python多線程與global變量詳解
今天早上起來寫爬蟲,基本框架已經(jīng)搭好,添加多線程爬取功能時,發(fā)現(xiàn)出錯:
比如在下載文件的url列表中加入200個url,開啟50個線程。我的爬蟲…竟然將50個url爬取并全部命名為0.html,也就是說,最后的下載結(jié)果,是有1個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的定義 global g g = 0
后來終于發(fā)現(xiàn)問題:多線程+全局變量是個危險的組合,因為程序有多個線程在同時執(zhí)行,多個線程同時操作全局變量,會引起混亂。在多線程中操作全局變量,應(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!"
多線程消費者_(dá)給操作全局變量的語句加鎖 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)
大功告成!
以上這篇對python多線程與global變量詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Python global全局變量函數(shù)詳解
- python中g(shù)lobal與nonlocal比較
- python global關(guān)鍵字的用法詳解
- Python中 Global和Nonlocal的用法詳解
- python中g(shù)lobal用法實例分析
- python中的global關(guān)鍵字的使用方法
- Python中關(guān)鍵字global和nonlocal的區(qū)別詳解
- Python 內(nèi)置函數(shù)globals()和locals()對比詳解
- Python全局變量與global關(guān)鍵字常見錯誤解決方案
- Python全局變量關(guān)鍵字global的簡單使用
相關(guān)文章
Python第三方包之DingDingBot釘釘機(jī)器人
這篇文章主要介紹了Python第三方包之DingDingBot釘釘機(jī)器人,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04django haystack實現(xiàn)全文檢索的示例代碼
這篇文章主要介紹了django haystack實現(xiàn)全文檢索的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Pandas庫中dataframe.corr()函數(shù)的使用
dataframe.corr()是Pandas庫中的一個函數(shù),用于計算DataFrame中各列之間的相關(guān)系數(shù),本文主要介紹了Pandas庫中dataframe.corr()函數(shù)的使用,具有一定的參考價值,感興趣的可以了解一下2024-07-07詳解Python 關(guān)聯(lián)規(guī)則分析
這篇文章主要介紹了Python 關(guān)聯(lián)規(guī)則分析的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03