Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 8, 2020 12:41:48

AlekseyPy
Зарегистрирован: 2020-10-08
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ограничить количество паралельных коррутин, запускаемых asincio?

У меня асинхронно читаются файлы с диска (их всего порядка 200 штук), накапливая информацию из них в оперативной памяти. Поэтому чтобы не забилась память хочется ограничить количество одновременно читаемых файлов двумя штуками. Есть какой- то способ, чтобы это сделать?

Офлайн

#2 Окт. 8, 2020 12:45:09

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Как ограничить количество паралельных коррутин, запускаемых asincio?

Используй потоки.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Окт. 8, 2020 12:59:15

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как ограничить количество паралельных коррутин, запускаемых asincio?

https://docs.python.org/3/library/asyncio-sync.html#asyncio.Semaphore
https://docs.python.org/3/library/asyncio-sync.html#asyncio.BoundedSemaphore



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Окт. 8, 2020 13:01:51

AlekseyPy
Зарегистрирован: 2020-10-08
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ограничить количество паралельных коррутин, запускаемых asincio?

Rodegast
Используй потоки.
Асинхронность придумали не зря: программист сам указывает когда сделать переключение на другую задачу. А в случае потоков / процессов это делает ос в произвольные (а значит неоптимальные!) моменты времени. Причем совершенно не факт, что переключение происходит именно в момент ожидания: ос не анализирует ждет поток данные из памяти, с диска или “перемалывает цифры”, а тупо через определенный квант времени предоставляет ядро процессора другому потоку / процессу.

Офлайн

#5 Окт. 8, 2020 14:17:21

AlekseyPy
Зарегистрирован: 2020-10-08
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как ограничить количество паралельных коррутин, запускаемых asincio?

Офлайн

#6 Окт. 8, 2020 15:33:59

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Как ограничить количество паралельных коррутин, запускаемых asincio?

> Асинхронность придумали не зря: программист сам указывает когда сделать переключение на другую задачу.

Асинхронность придумали не для этого.

> А в случае потоков / процессов это делает ос в произвольные (а значит неоптимальные!) моменты времени

Твоя программа будет работать не в “вакууме”, параллельно с ней могут быть запущены тысячи сторонних процессов. По этому ты не можешь предсказать какой момент времени будет оптимальным, а какой нет.

> ос не анализирует ждет поток данные из памяти, с диска или “перемалывает цифры”, а тупо через определенный квант времени предоставляет ядро процессора другому потоку / процессу.

Да ладно? В ядро встроено несколько планировщиков задач и планировщиков ввода-вывода. Они не просто переключает контекст, а работает по довольно сложному алгоритму.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version