Сроки, сколько времени требуется, чтобы прочитать файл

Я пишу процесс, который требует от меня построчно читать в большом файле jsonl (в некоторых случаях +4 гигабайта), выполнять операции с этими строками, а затем записывать их в файл.

Я пытаюсь профилировать приложение, синхронизируя определенные операции, одной из которых должно быть чтение файла. Я также пытаюсь улучшить производительность путем объединения операций чтения перед выполнением этих операций, а затем записи. У меня есть функция, которая выдает партии маршалированного json (список диктов), и методология чтения по времени (и, если необходимо, загрузки json) не кажется мне очевидной.

def batch(self, batch_size):                      
    result = []                                                     
    for line in self.file:                <-- I would like to time each read        
        l = line.strip()                          
        if not l:                                 
            break                                 
        result.append(ujson.loads(l))             
        if len(result) >= batch_size:
            to_return = result
            result = []             
            yield to_return
    if result:                                    
        yield result                                   

Я думал о том, чтобы сделать что-то подобное, однако я не уверен, что это лучший способ, которым я мог бы сделать это

def batch_1(self, batch_size):                   
    result = []                                  
    while True:                                  
        start_read = time.time()                 
        line = self.file.readline()              
        self.read_time += time.time() - start_read
        if not line:                             
            break                                
        result.append(line.strip())              
        if len(result) >= batch_size:            
            to_return = result                   
            result = []                          
            yield to_return  
    if result:                                    
        yield result  

Мое желаемое использование этой функции будет следующим

for batch in self.reader.batch(self.batch_size):
    ...
    ...    

Какие-либо предложения? Спасибо!

0 ответов

Другие вопросы по тегам