linkbase中存有幾十萬(wàn)條url,數(shù)據(jù)如下所示:
{ "_id" : ObjectId("5a322cad6c85e0369ab54161"), "url" : "https://www.xxxx.com/", "status_code" : 0, "spider_name" : "test_spider", "crawl_time" : "2017-12-14 15:47:57" }
{ "_id" : ObjectId("5a322c9f6c85e03699b54227"), "url" : "https://www.xxxxaa.com/", "status_code" : 0, "spider_name" : "test_spider", "crawl_time" : "2017-12-14 15:47:43" }
{ "_id" : ObjectId("5a2f082c6c85e0c65bc553c9"), "url" : "https://aabb.com", "status_code" : 403, "spider_name" : "test_spider", "crawl_time" : "2017-12-12 06:35:24" }
{ "_id" : ObjectId("5a2f082b6c85e0c65bc553c8"), "url" : "https://cccc.com", "status_code" : 403, "spider_name" : "test_spider", "crawl_time" : "2017-12-12 06:35:23" }
我用數(shù)據(jù)庫(kù)查詢工具,db.linkbase.find({"spider_name":"test_spider"})大約耗時(shí)122秒
數(shù)據(jù)庫(kù)有相關(guān)索引
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "linkbase.linkbase"
},
{
"v" : 1,
"key" : {
"spider_name" : 1
},
"name" : "spider_name_1",
"ns" : "linkbase.linkbase"
}
]
程序調(diào)用一個(gè)函數(shù),max_requests每次取10個(gè):
def get_mongodb_linkbase(self,max_requests):
linkbase = []
for i in range(max_requests):
result = self.db_linkbase_collection.find_one_and_delete({'spider_name':'test_spider'})
if result == None:
continue
else:
linkbase.append(result)
return linkbase
可是爬蟲(chóng)運(yùn)行的時(shí)候,感覺(jué)速度并不快,爬蟲(chóng)代碼采用了協(xié)程gevent,每個(gè)協(xié)程開(kāi)50個(gè)
def handle_linkbase():
while True:
linkbase_info = mongo_insert.get_mongodb_linkbase(10)
if len(linkbase_info) == 0:
time.sleep(random.choice(range(60)))
else:
for url in linkbase_info:
test.header['User-Agent'] = random.choice(setting.user_agent)
test.save_url_to_task(url['url'],header=test.header)
def gevent_fun_linkbase():
jobs = [gevent.spawn(handle_linkbase) for i in range(50)]
gevent.joinall(jobs)
m2 = multiprocessing.Process(target=gevent_fun_linkbase)
m2.start()
m2.join()
并將協(xié)程放入多進(jìn)程。也就是三個(gè)進(jìn)程分別運(yùn)行三個(gè)協(xié)程,每個(gè)協(xié)程里開(kāi)50個(gè)程序。但是感覺(jué)速度并不快,甚至有卡頓現(xiàn)象。就是在tail -f log的時(shí)候,發(fā)現(xiàn)有幾秒中,無(wú)信息輸出,并且運(yùn)行速度慢。
目前不太清楚是不是mongodb查詢時(shí)候造成的卡頓。
感覺(jué)也不是代理造成的卡頓,requests我把重試關(guān)了,timeout為1.
請(qǐng)各位大牛幫忙分析。
我用數(shù)據(jù)庫(kù)查詢工具,db.linkbase.find({"spider_name":"test_spider"})大約耗時(shí)122秒
是122秒還是122ms?122秒的話相當(dāng)慢了。
如果不確定是不是MongoDB方的問(wèn)題,可以先用profiler看一下執(zhí)行的查詢到底花了多少時(shí)間。從你上面的信息來(lái)看,我比較傾向于不是數(shù)據(jù)庫(kù)這一端慢。
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。