第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

pymongo不使用close方法時(shí),內(nèi)存占用很大,求解

pymongo不使用close方法時(shí),內(nèi)存占用很大,求解

翻閱古今 2019-05-24 11:40:21
爬蟲時(shí),如果不使用pymongo的close方法,pythonxxx.py內(nèi)存會(huì)一點(diǎn)一點(diǎn)的上漲,最開始900多M,慢慢的就1個(gè)多G,快到2G了。但是速度快,在tail-flog的時(shí)候,基本看不清輸出信息。如果使用了close方法,內(nèi)存穩(wěn)定在500M左右,但是讀和取數(shù)據(jù)庫(kù)速度慢,在taillog的時(shí)候,能看到正在保存哪個(gè)URL,正在獲取哪個(gè)URL。請(qǐng)問我該如何解決這個(gè)問題呢。#-*-coding:utf-8-*-importloggingimportsettingimporttime,datetimefromsettingimportmongo_host,mongo_port,mongo_db_name_data,mongo_db_name_linkbase,mongo_db_name_taskimportpymongologging.basicConfig(filename='log',level=logging.INFO)classConnect_mongo(object):def__init__(self):self.mongo_host=mongo_hostself.mongo_port=mongo_portself.conn()defconn(self):self.client=pymongo.MongoClient(host=self.mongo_host,port=self.mongo_port)self.db_data=self.client[mongo_db_name_data]self.db_linkbase=self.client[mongo_db_name_linkbase]self.db_linkbase_collection=self.db_linkbase.linkbaseself.db_task=self.client[mongo_db_name_task]definsert_db(self,item):setting.my_logger.info('當(dāng)前插入數(shù)據(jù)庫(kù)的最終數(shù)據(jù)為%s'%item)self.db_data.xxx_data.update({"car_id":item['car_id']},item,True)self.client.close()defsave_linkbase(self,response_result,spider_name,hash_url,item_type):ifitem_type=='carinfo_item':linkinfo={}linkinfo['status']=response_result.status_codelinkinfo['url']=response_result.urllinkinfo['spider_name']=spider_namelinkinfo['hash_url']=hash_url#保存到linkbaseself.db_linkbase_collection.update({"status":linkinfo['status'],"hash_url":hash_url},linkinfo,True)self.client.close()else:self.db_linkbase_collection.create_index([("over_time",pymongo.ASCENDING)],expireAfterSeconds=7200)linkinfo={}linkinfo['status']=response_result.status_codelinkinfo['url']=response_result.urllinkinfo['spider_name']=spider_namelinkinfo['hash_url']=hash_urllinkinfo['over_time']=datetime.datetime.utcnow()#保存到linkbaseself.db_linkbase_collection.update({"status":linkinfo['status'],"hash_url":hash_url},linkinfo,True)self.client.close()defsave_task(self,task):setting.my_logger.info('當(dāng)前插入數(shù)據(jù)庫(kù)的task信息為%s'%task)self.db_task.xxx_task.update({'url':task['url']},task,True)self.client.close()defget_task(self,max_requests=10):task=[]foriinrange(max_requests):result=self.db_task.xxx_task.find_one_and_delete({})task.append(result)returntaskdefduplicate_removal(self,hash_data):result=self.db_linkbase.linkbase.find_one({'hash_url':hash_data})ifresult==None:returnTrueelse:returnFalsemongo_insert=Connect_mongo()在另一個(gè)py文件中使用requests進(jìn)行爬蟲和xpath進(jìn)行處理,然后存儲(chǔ)或取數(shù)據(jù)庫(kù)。
查看完整描述

2 回答

?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

內(nèi)存占用跟你取出來的數(shù)據(jù)是如何緩存,以及你是否釋放了內(nèi)存有關(guān)。舉個(gè)例子,一次性取出5萬條記錄,然后存在一個(gè)list中,如果取多了,不停往list中添加,內(nèi)存占用自然就大了,因?yàn)楸旧韮?nèi)存中存的數(shù)據(jù)就這么大,你都要用到,這是沒辦法解決的問題。除非你擴(kuò)內(nèi)存條。而如果是另一種情況,你每次都實(shí)例化一個(gè)MongoClient,查詢出來的task沒有刪掉,就會(huì)導(dǎo)致無用的result還緩存著數(shù)據(jù),沒有被回收,導(dǎo)致內(nèi)存成倍增長(zhǎng)。此時(shí),只要在你不用這些數(shù)據(jù)的時(shí)候deltask一下就OK了。你如何使用的,如何導(dǎo)致內(nèi)存增長(zhǎng)的得自己看。
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-24
  • 2 回答
  • 0 關(guān)注
  • 1106 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)