170 похожих чатов

Всем привет, не подскажете, это нормально если 100 тысяч записей

в csv обрабатываются 20-30 минут?

49 ответов

190 просмотров

Довольно медленно, но смотря чё за обработка

Сергей- Автор вопроса
Tigran Saluev
Довольно медленно, но смотря чё за обработка

async with aiofiles.open(in_path, 'r', encoding='utf-8') as fr: reader = AsyncReader(fr, delimiter=',') async for row in reader: row = row[:len(order)] for i, s in enumerate(row): cur_res += (get_hash(s) if order[i][1] else s) + ';'

cur_res += строка — это квадратичный алгоритм

Для строк - нет

Сергей
async with aiofiles.open(in_path, 'r', encoding='u...

Для начала бы я выкинул асинкио

Tishka17
Для строк - нет

В смысле? Там же каждый раз новая строка формируется, суммарно получается квадрат

Сергей- Автор вопроса
Tigran Saluev
cur_res += строка — это квадратичный алгоритм

как это можно ускорить не подскажете? просто нужно записывать каждые 100тыс записей в новый файл

Tigran Saluev
В смысле? Там же каждый раз новая строка формирует...

Нет, если это единственная ссылка на строку, там есть оптимизация

Сергей- Автор вопроса
Tigran Saluev
parts = [] parts.append(…) result = “”.join(parts)

хм изначально записывал в массив и сохранял через csv writer, но мне подсказали что в строку формата csv записывать будет быстрее

Сергей
async with aiofiles.open(in_path, 'r', encoding='u...

1. асинкио нахрен, тут все блокирующее 2. срезы хз зачем - это доп копирование 3. что в get_hash происходит?

Сергей- Автор вопроса
Tishka17
1. асинкио нахрен, тут все блокирующее 2. срезы хз...

срезы да, просто в файле оказалась лишняя пустая строка. как экономнее можно избавиться от нее просто берет хэш от строки, нужно ли его брать записано в order

Сергей- Автор вопроса
quantum super position
Этого уже нет :D

хм, у меня в 3.11 вроде есть >>> timeit.timeit("s = ''\nfor i in range(1000000): s += str(i)", number=10) 1.9530952500645071 >>> timeit.timeit("parts = []\nfor i in range(1000000): parts.append(str(i))\ns = ''.join(parts)", number=10) 1.5781069160439074

Сергей
?

row = row[:len(order)] это никак не поможет пропустить пустые строки, это ограничивает длину строки количеством ордеров

Сергей- Автор вопроса
Tishka17
чо

лишний пусттой столбец точнее

Сергей- Автор вопроса
Сергей
лишний пусттой столбец точнее

про который нет инфы в order

Сергей- Автор вопроса
Tishka17
узнай уже про zip функцию

хм, точно, наверное быстрее чем обрезать но всё же думаю это не основное что замедляет..

Tigran Saluev
хм, у меня в 3.11 вроде есть >>> timeit.timeit("s...

У меня в 3.11 нет: timeit.timeit("s = ''\nfor i in range(1000000): s += str(i)", number=10) 11.015409500003443 timeit.timeit("parts = []\nfor i in range(1000000): parts.append(str(i))\ns = ''.join(parts)", number=10) 0.8897796000092058

Сергей- Автор вопроса
Tishka17
асинкио выкинь и замерь

вообще это фастапи бэкграунд таск. я просто думал если сразу придет запрос на несколько обработок, не ускорит ли асинкио получение результата? но вообще наверное можно пока принимать только одну обработку, остальные не принимать пока есть активная..

Сергей
вообще это фастапи бэкграунд таск. я просто думал ...

не ускорит, у тебя тут все абсолютно синхронное

Сергей- Автор вопроса
Tishka17
не ускорит, у тебя тут все абсолютно синхронное

aiosv, aiofiles не делают эти задачи асинхронными?

Сергей- Автор вопроса

в чем тогда их смысл?

не имею ни малейшего понятия

Сергей- Автор вопроса
Tigran Saluev
@sergemeln проверь-ка у себя

>>> timeit.timeit("s = ''\nfor i in range(1000000): s += str(i)", number=10) 19.311255100008566 >>> timeit.timeit("parts = []\nfor i in range(1000000): parts.append(str(i))\ns = ''.join(parts)", number=10) 2.5301578999933554 >>> то есть стоит строку заменить на массив который потом собираю в строку?

Сергей
вообще это фастапи бэкграунд таск. я просто думал ...

Ну тут как вариант сделать отдельный микросервис мелкий который будет работать в многопотоке, и обрабатывать паралельно запросы, а потом их тебе откидывать

Tishka17
не имею ни малейшего понятия

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

Сергей
>>> timeit.timeit("s = ''\nfor i in range(1000000)...

какая ОС? как питон ставил?

Сергей- Автор вопроса
Tishka17
какая ОС? как питон ставил?

win10, с оф сайта а где-то наоборот быстрее строки?

quantum super position
Этого уже нет :D

нужна твоя помощь. У нас не сходятся показания

Tishka17
нужна твоя помощь. У нас не сходятся показания

а у вас у всех одинаковая версия языка?

Сергей
в чем тогда их смысл?

Для интегрирования в асинк код. Какому-нибудь же aiohttp передать (хотя возможно он умеет синхронные файлы грузить не блокируя луп)

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта