@eduardostalinho
machine learning engineer @ Appus
operator @ quaesera.org
software engineer for anyone who wants
frustrated musician from the future @ bandcamp.com/kidsintheoven
proud member of PythOnRio
the other side of ECCF tech & cakes
é uma forma de desenvolver sistemas concorrentes em encadeamento único (single-threaded) utilizando handling de eventos.
várias linguagens já incluíam formas de trabalhar com assincronia.
alguns pythonistas usando threads e subprocesses (e sockets?).
bibliotecas e frameworks.
nosso BDFL inicia o projeto tulip
nodejs (libuv), go, erlang
isso não necessariamente é assíncrono, mas é concorrente
twisted, gevent, etc...
oferecer uma interface pythônica para programação assíncrona
retirar o peso do SO e devolver poder à linguagem
Guido: "os caras que trabalham com isso, por favor, me expliquem como esse negócio funciona"
generators "yield"
functools
closures
executors
decorators
loop de eventos
coroutines
corrotinas(?)
import asyncio
loop = asyncio.get_event_loop()
loop.run_forever()
@asyncio.coroutine
async def
yield from
await/yield from
execução, suspensão e cancelamento de de tarefas
agendamento de tarefas
tarefas tediosas como crawlers e parsers
serviços assíncronos sobre IP
async def crawler(url):
content = await get_content(url)
async for a in content.get_links():
await asyncio.ensure_future(get_content(a.href))
return 'OK'
async def print_content(entry, loop):
loop.call_later(print_content, 1000)
https://github.com/python/asyncio/tree/master/examples
...
https://github.com/python/asyncio/wiki
https://code.facebook.com/posts/1040181199381023/python-in-production-engineering/
aiohttp, aioredis, irc3, feedbloom
http://asyncio.org
O asyncio não é uma panacéia (nem tudo é prego)
muitas bibliotecas novas usando asyncio
testar e debuggar com asyncio
qual é a camada de abstração que você está trabalhando