国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

對python多線程與global變量詳解

2020-01-04 14:06:23
字體:
供稿:網(wǎng)友

今天早上起來寫爬蟲,基本框架已經(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)當給該操作加鎖。

以下為修改后的代碼:

函數(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!"
多線程消費者_給操作全局變量的語句加鎖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)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 晋中市| 顺义区| 石泉县| 林州市| 大厂| 佛坪县| 小金县| 邛崃市| 临泉县| 盐山县| 绥中县| 五常市| 汉寿县| 新河县| 金坛市| 祁阳县| 萨迦县| 巍山| 大田县| 武汉市| 长泰县| 孝义市| 木兰县| 浪卡子县| 汉阴县| 宣汉县| 虞城县| 武安市| 资中县| 原平市| 合作市| 胶南市| 叶城县| 崇州市| 安顺市| 乌兰县| 汝南县| 清徐县| 盐亭县| 保德县| 门源|