Open strannik-j opened 5 years ago
Примерно через час скорость падает до нескольких сотен килобитт. Появляются огромные задержки. Использование становится невозможным.
Насколько мне известно, то надо использовать TelegramX, т.к. он модифицированный и там скорость до 240. Но автор почему-то закоментил все связанное с TelegramX.
скорость 240мбит - для голой загрузки файла через telegram_client_x - реализуется она за счет многопоточности - для операций ввода вывода Python отпускает GIL - поэтому тут появляется выигрыш, но есть ряд моментов:
в ботах(AudioTubeBot/VideoTubeBot) сервисы загрузки работают через python-rq - то есть постоянно запущены несколько процессов-воркеров, которые слушают очередь запросов и при получении запроса начинают загружать в несколько потоков.
здесь же пока что загрузчики запускаются через subprocess - на один блок один процесс - то есть каждый раз тратится много ресурсов на создание процесса, старт интерпретатора и тд, кроме того - для маленьких размеров файла многопоточность не дает большого плюса - так как на переключение между потоками затраты превышают выигрыш(не успевает раскачаться условно говоря) - поэтому количество потоков зависит от размера файла загружаемого.
сама загрузка не очень оптимально сделана - чанки распределяются между потоками и загружаются итерациями пачками - то есть когда поток заканчивает загрузку - он ждет следующей итерации чтобы начать загружать дальше
в данной реализации загрузка была через диск и dedupfs еще и буферизует весь файл перед загрузкой, сейчас перевел upload на pipe, download тоже, но вылез баг и вернул на NamedTemporaryFile пока что
TelegramClientX закомментирован был из за совместимости с Telethon 0.19.1 - в нем есть поиск по сообщениям, но не работало на тот момент с моим модом, сейчас актуализировал
В принципе от текущей версии можно отталкиваться уже в улучшении - самое пока что тут кривое это непосредственно dedupfs - по хорошему нужно этот блок на что то заменить вменяемое. Что касается сервисов загрузки - я доделаю и упакую в некую либу кросплатформенную вроде tdlib, в ней будет воркеров несколько и сетевой интерфейс
Установил на европейский VPS с хорошим каналом, но средняя скорость ≈60 Mbit.
Как можно её увеличить?
Изменить размер блока?
Увеличить число потоков?
Что-то ещё?