Size: a a a

2021 April 02

АР

Артем Разуваев... in Moscow Python
тоесть есть кейс с кучей гетов.
я беру aiohttp создаю кучу сессий, запускаю в цикл событий и опрашиваю результаты.
Тут все понятно.
А если это все замутить на пуле потоков, то я выиграю что-то в производительности? Или тупо нагромозжю потоков, а по сути сделаю то же самое?
источник

N

Nikolay in Moscow Python
Артем Разуваев
тоесть есть кейс с кучей гетов.
я беру aiohttp создаю кучу сессий, запускаю в цикл событий и опрашиваю результаты.
Тут все понятно.
А если это все замутить на пуле потоков, то я выиграю что-то в производительности? Или тупо нагромозжю потоков, а по сути сделаю то же самое?
Ты тупо нагромоздишь потоков, которые будет менеджить сама ос, а не интерпретатор. А ос менеджит их довольно в тяжёлой манере, да ещё и GIL будет
источник

N

Nikolay in Moscow Python
То есть оверхед будет на порядок больше, а выигрыша толком никакого, если не считать теоретическую возможность использовать несколько ядер. Но последнее, понятно, не в питоне, а уже в Go, например
источник

N

Nikolay in Moscow Python
С другой стороны, в асинхронном коде любая долгая операция блокирует весь цикл, что тоже печалька, поэтому долгие операции в том же asyncio "аутсорсят" в треды
источник

АР

Артем Разуваев... in Moscow Python
Nikolay
С другой стороны, в асинхронном коде любая долгая операция блокирует весь цикл, что тоже печалька, поэтому долгие операции в том же asyncio "аутсорсят" в треды
гранд мерси. Теперь как то пазл сложился.
Попробую долго играющие функции выводить в отдельные потоки, а мелочь болтать в основном цикле.
источник

N

Nikolay in Moscow Python
Артем Разуваев
гранд мерси. Теперь как то пазл сложился.
Попробую долго играющие функции выводить в отдельные потоки, а мелочь болтать в основном цикле.
Только не забывай, что типичная ошибка - шарить эвентлуп между потоками. По умолчанию питон помогает тебе этого НЕ делать, но всякое бывает
источник

N

Nikolay in Moscow Python
Ну и по возможности лучше поменьше использовать трюки с потоками и побольше - асинхронные версии библиотек
источник

АР

Артем Разуваев... in Moscow Python
2 потока в 1 луп? Затейно )
источник

АР

Артем Разуваев... in Moscow Python
на счет либ согласен. aiohttp прям все проблемы мои решила )
источник

Ст

Себастьян Перейра то... in Moscow Python
Артем Разуваев
Ребят по теории просвятите плиз по быстренькому.

Вот есть либа asyncio
Там есть событийный цикл.
А как он под капотом работает? С тредами или мульрипроцессингом?
Я понимаю что это сопрограммы, но хотелось бы для себя внести ясность как именно это все работает.
как должно быть ясно понятно из названия, либа работает с системным IO
который как бы с той стороны асинхронный, т.е. все валится кучей, а с этой стороны данные вливаются в один сокет
далее см. выше камент про переключение контекста

(реализация переключения может быть разной)
источник

Ст

Себастьян Перейра то... in Moscow Python
к типичной ошибке шарить между потоками, две ещё:
поднимать инстанс асинкио в каждом модуле
юзать либы разных типов в одном коде
источник

АР

Артем Разуваев... in Moscow Python
ну если с первым еще более менее понятно, то вот с либами все как бы ситуативно.
к примеру получение кучи результатов гет запросов мне нужно складывать в файлы с разным содержимым.
Запись в файл по дефолту однопоточная.
Есть либа aiofiles, которая организует мулипоточную запись. Но она вроде на мультипоточности основана.
источник

N

Nikolay in Moscow Python
Артем Разуваев
ну если с первым еще более менее понятно, то вот с либами все как бы ситуативно.
к примеру получение кучи результатов гет запросов мне нужно складывать в файлы с разным содержимым.
Запись в файл по дефолту однопоточная.
Есть либа aiofiles, которая организует мулипоточную запись. Но она вроде на мультипоточности основана.
а тут вообще весело - асинхронной записи в файлы на уровне ФС не существовало вообще до недавнего времени, поэтому и нода, и питон, и другие языки делают это через треды
источник

N

Nikolay in Moscow Python
сейчас есть io_uring, но я не знаю, есть ли уже стабильные для прода питонячьи либы под него. Плюс, нужно ядро 5.4+
источник

N

Nikolay in Moscow Python
Артем Разуваев
ну если с первым еще более менее понятно, то вот с либами все как бы ситуативно.
к примеру получение кучи результатов гет запросов мне нужно складывать в файлы с разным содержимым.
Запись в файл по дефолту однопоточная.
Есть либа aiofiles, которая организует мулипоточную запись. Но она вроде на мультипоточности основана.
такую задачу, особенно если нужна производительность, я бы писал на го, на самом деле
источник

N

Nikolay in Moscow Python
тупо сэкономишь много строчек кода и нервов
источник

SR

Sergey Rúdnev in Moscow Python
Maxim
бесят люди которые откидываются и не спрашивают
++
источник

АР

Артем Разуваев... in Moscow Python
Nikolay
такую задачу, особенно если нужна производительность, я бы писал на го, на самом деле
только питон более-мнее освоил, теперь с го бдсмить (
источник

M

Mλxim in Moscow Python
Артем Разуваев
только питон более-мнее освоил, теперь с го бдсмить (
go для таких задач  использовать НАМНОГО проще  и лучше чем python
источник

АР

Артем Разуваев... in Moscow Python
Mλxim
go для таких задач  использовать НАМНОГО проще  и лучше чем python
уже взял учебники )
источник