У меня проблема с моим кодом Python. Я обрабатываю большой (3,5 ГБ) JSON-файл, который содержит оценки, и он мне нужен в виде кусков из 21984 баллов (то есть всех баллов за один запрос). Код работает нормально, но мой набор тестов 4000 запросов. Первые 10 идут быстро, но после этого экспоненциально увеличивается время вычисления этой части кода. Итак, через 5 часов я нахожусь на 500 запросов. Отпечатки были для регистрации, и кажется, что проблема заключается в переводе или добавлении строк в список. Кто-нибудь знает, как сделать это быстрее или видит, что заставило это становиться медленнее?
def getscorebatch(number):
print('Creating Batch..')
batch_temp = list()
with open(json_file_name, 'r') as FileObj:
print("Creating slice...")
lines_gen = islice(FileObj, (21894 * number), ((21894 * number) + 21894))
print("Appending slice...")
for line in lines_gen:
line = line.translate({ord(c): None for c in ':",}{ \n'})
batch_temp.append(line)
return batch_temp
ОБНОВЛЕНИЕ: Я пытался реализовать ваши предложения, и это намного быстрее! Огромное спасибо. Я довольно новичок в генераторах, так что теперь я не понимаю, как мне получить правильный кусок кода? Это даст мне первый кусок каждый раз ..
def generator(file_to_read):
c = 0
while c < 21894:
data = file_to_read.readline()
c += 1
if not data:
break
yield data
def getscorebatch(number):
print('Creating Batch..')
batch_temp = [0]*22000
with open(json_file_name, 'r') as FileObj:
gen_file = generator(FileObj)
batch_temp = [line.translate(line.maketrans("", "", REMOVE)) for line in gen_file]
print(len(batch_temp))
return batch_temp