Форум сайта python.su
49
wegwgweg
Можете пояснить пожалуйста, что тут реализовано http://habrahabr.ru/post/243207/? На сколько я понимаю там показано как вручную реализовать асинхронное выполнение кода. Или я ошибаюсь?
Офлайн
14
Мне понравилась эта статья http://compiletoi.net/fast-scraping-in-python-with-asyncio.html, попробуй почитать.
Офлайн
15
По корутинам я бы посоветовал вот эту мега презентацию http://www.dabeaz.com/coroutines/coroutines.zip
Рассказывается про корутины и где они могут пригодится, в том числе и для асинхронности.
Офлайн
39
plusplus
Поддержу. Презентация просто шикарная.
Офлайн
0
Читал статью http://compiletoi.net/fast-scraping-in-python-with-asyncio.html и возникла небольшая проблема с пониманием и перевод предложения
aiohttp.request is a coroutine, and so is the read method, so we'll need to use yield from to call them.
aiohttp.request это сопрограмма и по этому при чтении ответа сервера методом read, мы должны использовать yield from.
Офлайн
34
wegwgweg
Правильно я перевёл?
aiohttp.request является coroutine, также как и метод read, потом для ним мы должны использовать yield from
Офлайн
0
GreyZmeem
Вы приводили пример кода:
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())
Офлайн
34
done, pending = yield from asyncio.wait(tasks) for item in done: print(item.result())
import asyncio import aiohttp import functools @asyncio.coroutine def get(method, url, **kwargs): response = yield from aiohttp.request(method, url, **kwargs) body = yield from response.read() return body def done_callback(task, future): print('Done {}: {}'.format(task, future)) @asyncio.coroutine def main(): tasks = [ ('GET', 'http://python.org'), ('GET', 'http://python.su'), ('GET', 'http://python.net'), ] futures = [] for task in tasks: print('Creating task: {}'.format(task)) future = asyncio.async(get(*task)) future.add_done_callback(functools.partial(done_callback, task)) futures.append(future) yield from asyncio.wait(futures) if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main())
Офлайн