t u d o a o m e s m o t e m p o a g o r a
PYTHON ASSÍNCRONO
Programação concorrente sem tocar em threads ou callbacks
2
Sometimes you need a blank template.
FLUENT PYTHON, MEU PRIMEIRO LIVRO
Fluent Python (O’Reilly, 2015)
Python Fluente (Novatec, 2015)
Python к вершинам

мастерства* (DMK, 2015)
流暢的 Python†
(Gotop, 2016)
also in Polish, Korean…
3
* Python. To the heights of excellence

† Smooth Python
CONCORRÊNCIA
Não é o mesmo que paralelismo!
4
CONCORRÊNCIA X PARALELISMO
5
Rob Pike - 'Concurrency Is Not Parallelism'
https://www.youtube.com/watch?v=cN_DpYBzKso
GIRANDO 18 PRATOS COM APENAS 2 MÃOS
6
gIraNdo Pr

atos conco
rrência Mo
derNa eM
PythON
https://speakerdeck.com/ramalho/await-em-python-3-dot-5
FUNDAMENTOS PARA A CONCORRÊNCIA
• Interrupções de hardware
• Callbacks
• Threads (kernel, userland, green threads)
• Geradores
• Corrotinas
7
DESFIANDO THREADS
• Seven Concurrency Models in
Seven Weeks — When Threads
Unravel (Paul Butcher)
• Abstrações mais poderosas
• Actors, CSP, STM
• Data parallelism
• OpenCL (GPU)
• Lambda Architecture)
• Suporte nativo em linguagens
• Erlang e Elixir
• Clojure
• Go
• Cilk
8
CONCORRÊNCIA
APESAR DA GIL
Sim, mesmo com a querida Global Interpreter Lock
9
ALTERNATIVAS EM PYTHON
• Threads: OK para I/O de alto desempenho em escala
limitada
• Ver: Motor 0.7 Beta With Pymongo 2.9 And A Threaded Core

— A. Jesse Jiryu Davis — https://emptysqua.re/blog/motor-0-7-beta/
• Certas bibliotecas externas em Cython, C, C++, FORTRAN…
• Multiprocessing: múltiplas instâncias de Python
• Callbacks e deferreds em Twisted
• gevent: greenlets e monkey-patching
• Corrotinas em Tornado e Asyncio
10
ASYNCIO
O principal foco de desenvolvimento concorrente em Python hoje
11
ASYNCIO
• Biblioteca criada por Guido van Rossum (originalmente: Tulip)
• incorporada à biblioteca padrão no Python 3.4 como asyncio
• asyncio tem caráter provisional no Python 3.5
• API ainda instável
• status no Python 3.6…
• Eco-sistema muito ativo
• por exemplo: https://github.com/aio-libs/
12
13
14
15
16
17
18
LOOP DE EVENTOS PLUGÁVEL
• asyncio inclui um loop de eventos próprio
• API AbstractEventLoopPolicy permite substituir esse loop
de eventos por outro que implemente AbstractEventLoop
• AsyncIOMainLoop implementado pelo projeto Tornado
• Loop de eventos de toolkits para GUI: Quamash (PyQt4, PyQt5, PySide)
• Loops de eventos baseados na biblioteca libuv, base do Node.js
19
UVLOOP
• Implementada com bindings em Cython sobre libuv
• libuv é a biblioteca de I/O orientada a eventos do Node.js, usada também como
biblioteca externa em outras linguagens: C++, Lua, Julia, Python, Java, Go, PHP, C# etc.
• Criada por Yuri Selivanov, que criou a sintaxe async/await
• PEP 492 — Coroutines with async and await syntax
20
DESEMPENHO DO UVLOOP
Fonte: uvloop: Blazing fast Python networking — Yury Selivanov — 2016-05-03
https://magic.io/blog/uvloop-make-python-networking-great-again/ 21
CORROTINAS
NATIVAS
O principal foco de desenvolvimento concorrente em Python hoje
22
NOVA SINTAXE ASYNC DEF
• PEP 492: Novas palavras reservadas em Python 3.5
• async def para definir corrotinas nativas
• Novas instruções (somente em corrotinas nativas):
• await para delegar para objetos awaitable
• corrotinas nativas; geradores-corrotinas decoradas; implementam __await__
23
ANTES E DEPOIS
24
MAIS SUPORTE SINTÁTICO
• Ainda no PEP 492
• async for:

métodos especiais assíncronos __aiter__ e __anext__
• async with:

métodos especiais assíncronos __aenter__ e __aexit__
• Novidades do Python 3.6
• PEP 525: Asynchronous Generators
• PEP 530: Asynchronous Comprehensions (Python 3.6)
25
CONCLUSÃO
The End
26
MINHA OPINÃO
• Eco-sistema ainda jovem: bibliotecas em evolução
• alguns exemplos do Fluent Python agora geram avisos
• asyncio com sua política extensível é uma base sólida para
construir o futuro
• loops de eventos externos demonstra isso (ex. uvloop, pyuv)
• Vamos logo migrar para Python 3.5!
27
THE ONE (ABSTRACT) LOOP
28
¿PREGUNTAS?

TDC2016POA | Trilha Python - Python Assíncrono: tudo ao mesmo tempo agora

  • 1.
    t u do a o m e s m o t e m p o a g o r a PYTHON ASSÍNCRONO Programação concorrente sem tocar em threads ou callbacks
  • 2.
    2 Sometimes you needa blank template.
  • 3.
    FLUENT PYTHON, MEUPRIMEIRO LIVRO Fluent Python (O’Reilly, 2015) Python Fluente (Novatec, 2015) Python к вершинам
 мастерства* (DMK, 2015) 流暢的 Python† (Gotop, 2016) also in Polish, Korean… 3 * Python. To the heights of excellence
 † Smooth Python
  • 4.
    CONCORRÊNCIA Não é omesmo que paralelismo! 4
  • 5.
    CONCORRÊNCIA X PARALELISMO 5 RobPike - 'Concurrency Is Not Parallelism' https://www.youtube.com/watch?v=cN_DpYBzKso
  • 6.
    GIRANDO 18 PRATOSCOM APENAS 2 MÃOS 6 gIraNdo Pr
 atos conco rrência Mo derNa eM PythON https://speakerdeck.com/ramalho/await-em-python-3-dot-5
  • 7.
    FUNDAMENTOS PARA ACONCORRÊNCIA • Interrupções de hardware • Callbacks • Threads (kernel, userland, green threads) • Geradores • Corrotinas 7
  • 8.
    DESFIANDO THREADS • SevenConcurrency Models in Seven Weeks — When Threads Unravel (Paul Butcher) • Abstrações mais poderosas • Actors, CSP, STM • Data parallelism • OpenCL (GPU) • Lambda Architecture) • Suporte nativo em linguagens • Erlang e Elixir • Clojure • Go • Cilk 8
  • 9.
    CONCORRÊNCIA APESAR DA GIL Sim,mesmo com a querida Global Interpreter Lock 9
  • 10.
    ALTERNATIVAS EM PYTHON •Threads: OK para I/O de alto desempenho em escala limitada • Ver: Motor 0.7 Beta With Pymongo 2.9 And A Threaded Core
 — A. Jesse Jiryu Davis — https://emptysqua.re/blog/motor-0-7-beta/ • Certas bibliotecas externas em Cython, C, C++, FORTRAN… • Multiprocessing: múltiplas instâncias de Python • Callbacks e deferreds em Twisted • gevent: greenlets e monkey-patching • Corrotinas em Tornado e Asyncio 10
  • 11.
    ASYNCIO O principal focode desenvolvimento concorrente em Python hoje 11
  • 12.
    ASYNCIO • Biblioteca criadapor Guido van Rossum (originalmente: Tulip) • incorporada à biblioteca padrão no Python 3.4 como asyncio • asyncio tem caráter provisional no Python 3.5 • API ainda instável • status no Python 3.6… • Eco-sistema muito ativo • por exemplo: https://github.com/aio-libs/ 12
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
    LOOP DE EVENTOSPLUGÁVEL • asyncio inclui um loop de eventos próprio • API AbstractEventLoopPolicy permite substituir esse loop de eventos por outro que implemente AbstractEventLoop • AsyncIOMainLoop implementado pelo projeto Tornado • Loop de eventos de toolkits para GUI: Quamash (PyQt4, PyQt5, PySide) • Loops de eventos baseados na biblioteca libuv, base do Node.js 19
  • 20.
    UVLOOP • Implementada combindings em Cython sobre libuv • libuv é a biblioteca de I/O orientada a eventos do Node.js, usada também como biblioteca externa em outras linguagens: C++, Lua, Julia, Python, Java, Go, PHP, C# etc. • Criada por Yuri Selivanov, que criou a sintaxe async/await • PEP 492 — Coroutines with async and await syntax 20
  • 21.
    DESEMPENHO DO UVLOOP Fonte:uvloop: Blazing fast Python networking — Yury Selivanov — 2016-05-03 https://magic.io/blog/uvloop-make-python-networking-great-again/ 21
  • 22.
    CORROTINAS NATIVAS O principal focode desenvolvimento concorrente em Python hoje 22
  • 23.
    NOVA SINTAXE ASYNCDEF • PEP 492: Novas palavras reservadas em Python 3.5 • async def para definir corrotinas nativas • Novas instruções (somente em corrotinas nativas): • await para delegar para objetos awaitable • corrotinas nativas; geradores-corrotinas decoradas; implementam __await__ 23
  • 24.
  • 25.
    MAIS SUPORTE SINTÁTICO •Ainda no PEP 492 • async for:
 métodos especiais assíncronos __aiter__ e __anext__ • async with:
 métodos especiais assíncronos __aenter__ e __aexit__ • Novidades do Python 3.6 • PEP 525: Asynchronous Generators • PEP 530: Asynchronous Comprehensions (Python 3.6) 25
  • 26.
  • 27.
    MINHA OPINÃO • Eco-sistemaainda jovem: bibliotecas em evolução • alguns exemplos do Fluent Python agora geram avisos • asyncio com sua política extensível é uma base sólida para construir o futuro • loops de eventos externos demonstra isso (ex. uvloop, pyuv) • Vamos logo migrar para Python 3.5! 27
  • 28.
  • 29.