Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 10, 2015 15:18:38

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

Асинхронные web запросы

Подскажите аналог библиотеки requests (или другой подобной), который умел бы делать запросы асинхронно.

P.S python3

Отредактировано wegwgweg (Фев. 10, 2015 15:18:56)

Офлайн

#2 Фев. 10, 2015 18:13:20

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Асинхронные web запросы

wegwgweg
Подскажите аналог библиотеки requests (или другой подобной), который умел бы делать запросы асинхронно.

Ну скажем любой клиент из asyncio или requests + gevent

Отредактировано Alen (Фев. 10, 2015 18:18:00)

Офлайн

#3 Фев. 10, 2015 19:59:10

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

Асинхронные web запросы

Alen
Спасибо за ссылку.
Немогли бы вы ещё немного помочь, я с асиннхронной моделью выполнения плохо знаком, не можете показать небольшой пример как с использованием aiohttp запустить на пример получение 10 страниц?

P.S не пинайте сильно, если много прошу

Офлайн

#4 Фев. 11, 2015 01:18:17

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

Асинхронные web запросы

import asyncio
import aiohttp
 
 
@asyncio.coroutine
def get(method, url, **kwargs):
    response = yield from aiohttp.request(method, url, **kwargs)
    body = yield from response.read()
    return body
 
 
@asyncio.coroutine
def main():
    tasks = [
        asyncio.async(get('GET', 'http://python.org')),
        asyncio.async(get('GET', 'http://python.su')),
        asyncio.async(get('GET', 'http://python.net')),
    ]
    done, pending = yield from asyncio.wait(tasks)
    for item in done:
        print(item.result())
 
 
if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Офлайн

#5 Фев. 11, 2015 11:56:50

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Асинхронные web запросы

wegwgweg
Немогли бы вы ещё немного помочь, я с асиннхронной моделью выполнения плохо знаком, не можете показать небольшой пример как с использованием aiohttp запустить на пример получение 10 страниц?

GreyZmeem Уже ответил. А еще можно послушать и посмотреть.

Офлайн

#6 Фев. 11, 2015 11:57:17

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

Асинхронные web запросы

Alen
Да видел это видео, но он к сожалению не сильно углубляется при описании клиента. Там только общие примеры, которые есть в документации.

Офлайн

#7 Фев. 11, 2015 12:01:38

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

Асинхронные web запросы

Alen
А у вас нет какой- нибудь дельной ссылки, где объясняется принцип как пишется асинхронный код с помощью сопрограмм? Везде в основном пишут, что сопрограммы основаны на генераторах и на их основных свойствах, а подробностей нет почти не где. Очень хочу разобраться в этой теме, но пока не получается

Офлайн

#8 Фев. 11, 2015 12:10:36

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

Асинхронные web запросы

Я почти не пишу асинхронный код, но когда начинал учить, очень помог guide по twisted (тогда еще asyncio не было), который описывает что такое reactor, deffered etc.
Тыц (есть также перевод: тыц)

Офлайн

#9 Фев. 11, 2015 16:01:58

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Асинхронные web запросы

wegwgweg
какой- нибудь дельной ссылки, где объясняется принцип как пишется асинхронный код с помощью сопрограмм? Везде в основном пишут, что сопрограммы основаны на генераторах и на их основных свойствах

Генераторы и сопрограммы реализуют всего лишь модель ленивых вычислений, что само по себе не даёт асинхронности, но позволяет её красиво реализовать. (Если хотите посмотреть как не красиво, можете посмотреть на колбеки(callback функции) в NodeJS и вообще в JavaScript или например Twisted) Вам же нужно смотреть event loop.

В двух словах: программы могут тормозить из-за двух вещей:
1. Много вычислительных операций (например большие вложенные циклы).
2. Ждать каких-либо событий.

Вот для второго случая и используют асинхронность, если одна “задача” чего-то ожидает, то управление передается другой, если та встает на ожидание, то третьей и так по кругу, это и называется event loop. Он и является основой для всех асинхронных фреймворков, везде может называться по разному reactor, ioloop еще как-то, но всё крутится вокруг этого понятия.

Ну а документация на twisted, tornado или asyncio вполне самодостаточна, ёё можно курить.



Офлайн

#10 Фев. 11, 2015 20:17:44

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

Асинхронные web запросы

Можете пояснить пожалуйста, что тут реализовано http://habrahabr.ru/post/243207/? На сколько я понимаю там показано как вручную реализовать асинхронное выполнение кода. Или я ошибаюсь?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version