asyncio crash course

@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

conteúdo

  • o que é assincronia
  • origens do asyncio
  • trabalhando com asyncio
  • recursos

o que é programação assíncrona

é uma forma de desenvolver sistemas concorrentes em encadeamento único (single-threaded) utilizando handling de eventos.

origens

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...

tulip

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"

ASYNCIO

honking great ideas

generators "yield"

functools

closures

executors

decorators

mas e o single-thread?

loop de eventos

coroutines

corrotinas(?)

import asyncio

loop = asyncio.get_event_loop()
loop.run_forever()

PEP 492

@asyncio.coroutine

->
>->

async def

yield from

->
>->

await/yield from

PEP 380

->
>->

o que podemos fazer com isso?

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
...

o que vem sendo feito com asyncio

https://github.com/python/asyncio/wiki

https://code.facebook.com/posts/1040181199381023/python-in-production-engineering/

aiohttp, aioredis, irc3, feedbloom

http://asyncio.org

Algumas questões

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

Obrigado!

asyncio Crash Course

By Eduardo Oliveira de Carvalho

asyncio Crash Course

Crash O objetivo dessa palestra é apresentar o módulo asyncio incluído no python 3.4. Esse módulo é relativamente novo na linguagem e oferece ferramentas basais para processamento assíncrono e concorrência com Python. Algun tópicos abordados são: - histório do asyncio no python - analogias de processo assíncronos - desvendando os objetos do módulo asyncio - usando asyncio na vida real

  • 165