Найти - Пользователи
Полная версия: парсер и пожерание памяти.
Начало » Python для новичков » парсер и пожерание памяти.
1
juche-songun
Суть такова что файл весит 700М в нем 13 кк строк, но скрипт все время жерт по 10-60М памяти каждые Н секунд.
#!/usr/bin/env python2.7
#-*- coding: utf-8 -*-
import sys, time, urllib2
def chckdomain(listdomains, ftrue, ferror):
	headers={'User-agent':'Googlebot/2.1 (+http://www.googlebot.com/bot.html)'}
	while True:
		try:
			domain = listdomains.get()
			if not domain:
				sys.exit()
			
			request = urllib2.Request(domain, None, headers)
			request.get_method = lambda : 'HEAD'
			data = urllib2.urlopen(request).info().get('X-Powered-By', '')
			if data:
				ftrue.write(data+";;"+domain+";;true\n") 
			else:
				ftrue.write("0;;"+domain+";;false\n") 
		except urllib2.HTTPError, e:
			ftrue.write("0;;"+domain+";;"+str(e.code)+";;error\n") )
			ferror.flush()
			del  e
		except Exception, e:
			ferror.write("0;;"+domain+";;"+str(e)+"\n")
			ferror.flush()
			del e
		ftrue.flush()
		
		del domain
if __name__ == '__main__':
	from multiprocessing import Process, Queue
	listdomains = Queue(0)
	for domain in open(sys.argv[1], 'r'):
		listdomains.put(domain.rstrip())
	print "crawler"
	for idz in xrange(int(sys.argv[2])): #requests
		Process(target=chckdomain, args=(listdomains, open('./work/out/'+str(idz)+'.txt', 'w'),open('./work/error/'+str(idz)+'.txt', 'w'),)).start()	
Michail_V
может скажу глупость, но я вижу open(sys.argv, ‘r’): а закрытие не вижу… может из-за этого?
может лучше такую комбинацию использовать (она сама и закрывает и открывает
with open(path, "r") as file:
Exception
Michail_V
может скажу глупость, но я вижу open(sys.argv, ‘r’): а закрытие не вижу… может из-за этого?может лучше такую комбинацию использовать (она сама и закрывает и открывает
Насколько, именно я понял проблема в том что растет по мере работы у него.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB