그래서 파이썬 피클 파일에서 생성 된 데이터를로드하는 스크립트가 있습니다.Django orm을 통해 데이터로드 매우 메모리 집중
dump_file = open('movies.pkl')
movie_data = pickle.load(dump_file)
@transaction.commit_manually
def load_data(data):
start = False
counter = 0
for item in data:
counter += 1
film_name = item.decode(encoding='latin1')
print "at", film_name, str(counter), str(len(data))
film_rating = float(data[item][0])
get_votes = int(data[item][2]['votes'])
full_date = data[item][2]['year']
temp_film = Film(name=film_name,date=full_date,rating=film_rating, votes=get_votes)
temp_film.save()
for actor in data[item][1]:
actor = actor.decode(encoding='latin1')
print "adding", actor
person = Person.objects.get(full=actor)
temp_film.actors.add(person)
if counter % 10000 == 0 or counter % len(data) == 0:
transaction.commit()
print "COMMITED"
load_data(movie_data)
그래서 매우 큰 데이터 세트입니다. 그리고 크롤링 속도가 느려지는 곳에서 많은 메모리를 차지합니다. 과거에는 스크립트를 다시 시작하여 방금 전 데이터베이스에서 모든 것을 저장하는 데 꽤 많은 시간이 걸렸습니다.
데이터를 입력하기 위해 원시 sql을 쓰는 것 외에 다른 방법 (내 코드의 최적화도 좋을 것입니다)이 있는지 궁금합니다. 이전에 JSON 조명기를 사용해 보았는데이 방법보다 훨씬 나빴습니다.
movie_data는 각 동영상에 대한 정보 목록을 보유하고있는 사전이므로 여러 부분으로 사전을 분할하려고 할 수 있습니다. – dl8
왜이 거대한 데이터 세트를 데이터베이스가 아닌 피클에 저장하는 특별한 이유가 있습니까? – lmc
데이터를 얻는 방법의 특성상 모든 데이터를 피클에 모으고 모든 데이터를 처리하여 데이터베이스에 저장하는 것이 훨씬 편리합니다. 앞으로 데이터베이스에 직접로드하는 것을 작성하려고 시도 할 수도 있지만, 현재이 방법이 더 간단합니다. – dl8