Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 30, 2015 23:20:07

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

Асинхронная загрузка файлов по http в python3

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

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

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

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

Так вот вопрос чем заменить этот инструмент в Python3?
Я бы мог использовать треды, но думаю это чересчур прожорливый вариант.

Офлайн

#2 Авг. 30, 2015 23:28:34

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Асинхронная загрузка файлов по http в python3

SHok
Я бы мог использовать треды, но думаю это чересчур прожорливый вариант.
Есть стеклес…
http://www.stackless.com/

Отредактировано Shaman (Авг. 30, 2015 23:29:47)

Офлайн

#3 Авг. 30, 2015 23:54:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Асинхронная загрузка файлов по http в python3

Может чего не понимаю, но скорее всего вам достаточно стандартного модуля питона https://docs.python.org/3/library/asyncio.html
Если как мне показалось вы собираетесь делать это все на низком уровне обратите внимание на встроенные с версии 3.5 ключевые слова языка await async.
Конечно это не столь кардинально как предлагается выше.
Пробуждает сомнения ваша фраза

SHok
Я бы мог использовать треды, но думаю это чересчур прожорливый вариант.

Это требует оценки. Очень часто удобство поддержки оказывается намного важнее двух процентов прироста производительности. Буду банален оценку надо делать на целевой ОС и целевой аппаратуре. Наверное вам лучше помогут если вы конкретнее опишете задачу.



Отредактировано doza_and (Авг. 31, 2015 00:06:40)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version