91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

對python多線程與global變量詳解

發布時間:2020-09-06 01:06:37 來源:腳本之家 閱讀:200 作者:hsj_csdn 欄目:開發技術

今天早上起來寫爬蟲,基本框架已經搭好,添加多線程爬取功能時,發現出錯:

比如在下載文件的url列表中加入200個url,開啟50個線程。我的爬蟲…竟然將50個url爬取并全部命名為0.html,也就是說,最后的下載結果,是有1個0.html(重復的覆蓋了),還有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

后來終于發現問題:多線程+全局變量是個危險的組合,因為程序有多個線程在同時執行,多個線程同時操作全局變量,會引起混亂。在多線程中操作全局變量,應當給該操作加鎖。

以下為修改后的代碼:

函數:
 
def downLoad(url,num):
 x = str(num)
 filePath = "E://wgetWeiBao//"+x+".html"
 try:
  wget.download(url,filePath)
  print x+" is downloading..."
 
 except:
  print "error!"
多線程消費者_給操作全局變量的語句加鎖
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變量詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

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

AI

青海省| 鹤山市| 安乡县| 灯塔市| 福清市| 浠水县| 乌拉特后旗| 古交市| 金阳县| 万载县| 波密县| 长岛县| 达尔| 莱阳市| 延庆县| 双江| 南昌市| 禹城市| 宕昌县| 容城县| 金乡县| 综艺| 调兵山市| 泗洪县| 龙南县| 辽宁省| 娄烦县| 丹凤县| 澄迈县| 松潘县| 锡林郭勒盟| 巴马| 九江县| 常山县| 龙江县| 托克托县| 赞皇县| 大姚县| 华阴市| 莒南县| 徐水县|