Форум сайта python.su
0
Ищу инструмент который позволит мне заменить Coro который я использую программируя на Perl.
Задача которую мне нужно решить - обеспечить выполнение частей кода друг от друга не зависящих в одном процессе, но не тратя время на ожидание во время блокировок, путём переключения контекста выполнения на другую часть кода.
Что это даёт? Возможность асинхронно работать с HTTP (и другими вещами где вам придётся ждать, например базы данных или жёсткий диск) без лишних проблемм пользуясь своей любимой библиотекой.
В кратце о том как работает Coro:
Coro делал переключение контекста в рамках одного процесса в местах где процесс выполнения блокировался на ожидание ответа, таким образом в момент ожидания выполнялась работа, а не остановка процесса.
Например нужно скачать данные по двум ссылкам.
Мы заключаем код скачивания в конструкцию модуля (на подобии той что нужно делать при запуске потоков).
И запускаем выполнение.
И под капотом произойдёт следующее:
1. Отправляем запрос к серверу из первой ссылки.
2. Переходим к выполнению второго блока кода.
3. Отправляем запрос к серверу из второй ссылки.
4. Переключаемся на первый блок кода.
5. Обрабатываем ответ.
6. Переключаемся на второй блок кода.
7. Обрабатываем ответ.
Не думаю что я смог это сособо понятно описать, но надеюсь вы поняли о чём я)
По сути это способ ускорить выполнения программы за счёт выполнения полезной нагрузки вместо простоя в ожидании ответа от чего либо (сервера, жёсткого диска и т.д.).
Так вот вопрос чем заменить этот инструмент в Python3?
Я бы мог использовать треды, но думаю это чересчур прожорливый вариант.
Офлайн
88
SHokЕсть стеклес…
Я бы мог использовать треды, но думаю это чересчур прожорливый вариант.
Отредактировано Shaman (Авг. 30, 2015 23:29:47)
Офлайн
253
Может чего не понимаю, но скорее всего вам достаточно стандартного модуля питона https://docs.python.org/3/library/asyncio.html
Если как мне показалось вы собираетесь делать это все на низком уровне обратите внимание на встроенные с версии 3.5 ключевые слова языка await async.
Конечно это не столь кардинально как предлагается выше.
Пробуждает сомнения ваша фраза
SHok
Я бы мог использовать треды, но думаю это чересчур прожорливый вариант.
Отредактировано doza_and (Авг. 31, 2015 00:06:40)
Офлайн