1.Python多進程不能將信息放入隊列
2.代碼:
from urllib import request
from bs4 import BeautifulSoup
from multiprocessing import Manager
from multiprocessing import Pool
import os
def hand_url(url,name,queue):
room_message = {} #存放我需要的信息
print(name,os.getpid())
one_roomlist=[]
req=request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36')
with request.urlopen(req)as f:
data = f.read().decode()
soup = BeautifulSoup(data, 'html.parser')
clear_1 = soup.find_all(class_="table_type_7 responsive_table full_width t_align_l")
clear_1 = clear_1[0].tbody.contents
for i in clear_1:
if i != '\n':
message_small = []
for x in i.strings:
if x != '\n':
message_small.append(x)
one_roomlist.append(message_small)
room_message[name] = one_roomlist
#前半部分為爬去網(wǎng)頁信息和篩選內(nèi)容
print(room_message)
queue.put(room_message) #程序在這里卡住了,room_message為一個字典
print('ok')
if __name__ == '__main__':
queue=Manager().Queue()
pool = Pool(4)
pool.apply_async(hand_url,('http://202.115.129.139:81/trainingroomnote?roomid=91','A405',queue))
pool.close()
pool.join()
print(queue.get())
3.問題截圖
4.我自己嘗試把print(room_message)得到的內(nèi)容直接復(fù)制添加到隊列里面是可以的,但是一旦改成queue.put(room_message)程序是卡在這里的
道友 你首先要明白問題所在,到底是什么原因。
打個斷點,進去到queue隊列里的代碼看看??纯磓ueue里面的代碼是卡在了哪一步,報錯了嗎?如果報錯了,是什么錯誤。
有時候,代碼會捕獲異常,讓你無法直接判斷錯誤所在。
回到這個問題,程序卡住了,是不是隊列滿了?是不是有異常未捕獲? 是不是達到了競態(tài)條件?是不是發(fā)生了死鎖?(是的是的 就是你)
這個根本原因在于 你的隊列queue其實是共享變量,多線程不安全。線程池里對該隊列的操作達到了競態(tài)條件,所以一直等待對象鎖的釋放(同步阻塞ing)
把程序好好改一下吧,做個同步,給隊列加個鎖就行了。
好好看一下多線程的內(nèi)存模型,消費者生產(chǎn)者模式 就行
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。