Найти - Пользователи
Полная версия: Асинхронная загрузка файлов по http в python3
Начало » Python для новичков » Асинхронная загрузка файлов по http в python3
1
SHok
Ищу инструмент который позволит мне заменить Coro который я использую программируя на Perl.
Задача которую мне нужно решить - обеспечить выполнение частей кода друг от друга не зависящих в одном процессе, но не тратя время на ожидание во время блокировок, путём переключения контекста выполнения на другую часть кода.
Что это даёт? Возможность асинхронно работать с HTTP (и другими вещами где вам придётся ждать, например базы данных или жёсткий диск) без лишних проблемм пользуясь своей любимой библиотекой.

В кратце о том как работает Coro:
Coro делал переключение контекста в рамках одного процесса в местах где процесс выполнения блокировался на ожидание ответа, таким образом в момент ожидания выполнялась работа, а не остановка процесса.

Например нужно скачать данные по двум ссылкам.
Мы заключаем код скачивания в конструкцию модуля (на подобии той что нужно делать при запуске потоков).
И запускаем выполнение.
И под капотом произойдёт следующее:
1. Отправляем запрос к серверу из первой ссылки.
2. Переходим к выполнению второго блока кода.
3. Отправляем запрос к серверу из второй ссылки.
4. Переключаемся на первый блок кода.
5. Обрабатываем ответ.
6. Переключаемся на второй блок кода.
7. Обрабатываем ответ.

Не думаю что я смог это сособо понятно описать, но надеюсь вы поняли о чём я)
По сути это способ ускорить выполнения программы за счёт выполнения полезной нагрузки вместо простоя в ожидании ответа от чего либо (сервера, жёсткого диска и т.д.).

Так вот вопрос чем заменить этот инструмент в Python3?
Я бы мог использовать треды, но думаю это чересчур прожорливый вариант.
Shaman
SHok
Я бы мог использовать треды, но думаю это чересчур прожорливый вариант.
Есть стеклес…
http://www.stackless.com/
doza_and
Может чего не понимаю, но скорее всего вам достаточно стандартного модуля питона https://docs.python.org/3/library/asyncio.html
Если как мне показалось вы собираетесь делать это все на низком уровне обратите внимание на встроенные с версии 3.5 ключевые слова языка await async.
Конечно это не столь кардинально как предлагается выше.
Пробуждает сомнения ваша фраза
SHok
Я бы мог использовать треды, но думаю это чересчур прожорливый вариант.

Это требует оценки. Очень часто удобство поддержки оказывается намного важнее двух процентов прироста производительности. Буду банален оценку надо делать на целевой ОС и целевой аппаратуре. Наверное вам лучше помогут если вы конкретнее опишете задачу.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB