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

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

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

49 ответов

81 просмотр

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

Сергей- Автор вопроса
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 передать (хотя возможно он умеет синхронные файлы грузить не блокируя луп)

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Почему стало ломаться на D11? "739002.86400000' is not a valid timestamp" function IncDateTime(aStamp:TTimeStamp;aKind:TTriggerKind;aInterval:Integer):TDateTime; //aStamp = 2...
Катерина Свиридова
8
У тебя в конфиге нигде нет deny all; или вообще любого deny?
Alexander Sherbakov
10
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Ребят, чет я уже не догоняю... Крч в коде на асм там происходит нечто вроде a+число (a+1, a+2 и т.д.). Но почему строка lea ecx, [edx+1] работает как a+1?? В edx берется адрес...
Alan 🔝 Бэброу
4
думаешь я не смогу также сделать? мне это просто не удобно
int 💳 𝙖𝙞𝙧 𝙗𝙞𝙜 𝙗𝙤𝙗 🔫 check bio / spam block / AFK / nohello.com / GMT+3
9
Карта сайта