до 22 минут на 100тыс записей
Единственное не смог применить совет @evle_zzz про контекстный менеджер, т.к не очень понял как передавать туда n. Вместо этого закрываю файл вручную
Не подскажете остались ли еще какие-то узкие места которые не учел? Вот текущий код
for row in reader: #csv.reader
cur_row = []
for s in zip(row, order):
cur_row.append(get_hash(s[0]) if s[1][1] else s[0])
writer.writerow(cur_row)
if n % 100000 == 0:
now = datetime.now()
while last_time and last_time == now:
time.sleep(5)
now = datetime.now()
last_time = now
if fw:
fw.close()
new_filename = f'{now}.csv'
out_path = os.path.join('out', new_filename)
fw = open(out_path, 'w', encoding='utf-8')
writer = csv.writer(fw, delimiter=';')
n += 1
Передавать — параметром. Ты ж в open имя файла передаёшь как-то, вот будет маска файла и количество.
надо попробовать, но мне кажется по сравнению с использованием просто close это не даст выигрыша по времени хотя код будет и красивее
А что тут действительно за цирк с sleep?
Просто чтобы в имени нового файла было другое время (там минуты, я в коде это сократил), а как можно красивее написать это?
O_O. То есть вместо того чтобы придумать как имя файла формировать неповторяющееся, ты решил каждый раз продалбывать по 5 секунд? Гениально.
Так указано в требованиях: файлы отличаются только временем
Генерь просто рандомную строку
Ну микросекунды добавь, если настолько взаимоисключающие параграфы. Это ж совсем дичь получилась.
Детализация до минут. Почему дичь если одновременно обрабатывается только один файл (т.е спать скорее всего не придется)?
Такие требования надо уточнять. Если одновременно "не более стольки-то записей" и "файлы отличаются только именем" — кто-то облажался при постановке задачи. Не надо решать подобные вопросы методом "а подождём следующую минуту".
Не специалист конечно но не вижу ничего ужасного в ожидании, если одновременно обрабатываем только один файл.. 22 минуты настораживают больше
Тем более это явно на всякий случай, 100тыс явно больше минуты обрабатываются
Любое ожидание вида "нифига не делаем, хотя работы полно и её можно делать" — это косяк. Косяк совершенно непростительный.
Компы ускоряются. Через какое-то время данных будет больше, кто-нибудь полезет это оптимизировать и будет удивлён.
Обсуждают сегодня