Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

2 Sometimes you need a blank template.

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

CONCORRÊNCIA Não é o mesmo que paralelismo! 4

Slide 5

Slide 5 text

CONCORRÊNCIA X PARALELISMO 5 Rob Pike - 'Concurrency Is Not Parallelism' https://www.youtube.com/watch?v=cN_DpYBzKso

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

FUNDAMENTOS PARA A CONCORRÊNCIA • Interrupções de hardware • Callbacks • Threads (kernel, userland, green threads) • Geradores • Corrotinas 7

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

CONCORRÊNCIA APESAR DA GIL Sim, mesmo com a querida Global Interpreter Lock 9

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

ASYNCIO O principal foco de desenvolvimento concorrente em Python hoje 11

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

13

Slide 14

Slide 14 text

14

Slide 15

Slide 15 text

15

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

17

Slide 18

Slide 18 text

18

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

CORROTINAS NATIVAS O principal foco de desenvolvimento concorrente em Python hoje 22

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

ANTES E DEPOIS 24

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

CONCLUSÃO The End 26

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

THE ONE (ABSTRACT) LOOP 28

Slide 29

Slide 29 text

¿PREGUNTAS?