Asyncio community one year later EuroPython 2015, Bilbao Victor - - PowerPoint PPT Presentation

asyncio community one year later
SMART_READER_LITE
LIVE PREVIEW

Asyncio community one year later EuroPython 2015, Bilbao Victor - - PowerPoint PPT Presentation

Asyncio community one year later EuroPython 2015, Bilbao Victor Stinner vstinner@redhat.com Distributed under CC BY-SA license: http://creativecommons.org/licenses/by-sa/3.0/ Victor Stinner Python core developer since 5 years Senior Software


slide-1
SLIDE 1

EuroPython 2015, Bilbao

Victor Stinner

vstinner@redhat.com

Distributed under CC BY-SA license: http://creativecommons.org/licenses/by-sa/3.0/

Asyncio community

  • ne year later
slide-2
SLIDE 2

Python core developer since 5 years Senior Software Engineer at Red Hat Port OpenStack to Python 3 Working remotely from South of France

Victor Stinner

slide-3
SLIDE 3

Python 3.4.0: March 2014 Bare: almost no library

Asyncio launch

slide-4
SLIDE 4

python-tulip mailing list (Google Group) #asyncio IRC channel on Freenode https://github.com/python/asyncio Python bug tracker (bugs.python.org) More and more conferences!

Community

slide-5
SLIDE 5

Most famous and successful library HTTP client and server HTTPS Client and server Websocket https://aiohttp.rtfd.org/

aiohttp

slide-6
SLIDE 6

@asyncio.coroutine def fetch_page(url): req = yield from aiohttp.request('GET', url) assert req.status == 200 return (yield from req.read())

aiohttp client example

slide-7
SLIDE 7

MySQL: aiomysql PostgreSQL: aiopg (based on psycopg2)

SQL drivers

slide-8
SLIDE 8

dsn = 'dbname=aiopg host=127.0.0.1 user=…' @asyncio.coroutine def go(): pool = yield from aiopg.create_pool(dsn) with (yield from pool.cursor()) as cur: yield from cur.execute("SELECT 1") row = yield from cur.fetchone() assert row == (1,)

aiopg example

slide-9
SLIDE 9

peewee: peewee-async SQLAlchemy: aiopg.sa

ORM

slide-10
SLIDE 10

memcached: aiomemcache redis: aioredis redis: asyncio-redis

Key-value stores

slide-11
SLIDE 11

@asyncio.coroutine def wait_each_command(): foo = yield from redis.get('foo') bar = yield from redis.incr('bar') return foo, bar

aioredis example

slide-12
SLIDE 12

@asyncio.coroutine def pipelined(): get = redis.get('foo') incr = redis.incr('bar') foo, bar = yield from asyncio.gather(get, incr) return foo, bar

aioredis pipeline example

slide-13
SLIDE 13

CouchDB: aiocouchdb MongoDB: asyncio-mongodb

NoSQL

slide-14
SLIDE 14

DNS: aiodns (async resolver) IRC: bottom IRC: irc3 SSH: AsyncSSH XMPP (Jabber): slixmpp

Clients

slide-15
SLIDE 15

AMI: panoramisk (AMI and FastAGI) AMQP: aioamqp ElasticSearch: aioes Etcd: aioetcd Google Hangouts: hangups

More clients

slide-16
SLIDE 16

aiopyramid aiowsgi interest Muffin API hour

Web frameworks

nacho Pulsar rainfall Vase

slide-17
SLIDE 17

aiohttp.web AutobahnPython websockets WebSocket-for-Python

Websockets

slide-18
SLIDE 18

FastAGI (Asterisk): panoramisk IRC: irc3.irc3d HTTP: aiohttp SSH: AsyncSSH

Servers

slide-19
SLIDE 19

@asyncio.coroutine def hello(request): return web.Response(body=b"Hello, world") app = web.Application() app.router.add_route('GET', '/', hello)

aiohttp server

slide-20
SLIDE 20

@asyncio.coroutine def stats(request): body = yield from get_stats() return web.Response(body=body) app.router.add_route('GET', '/stats', stats)

aiohttp server

slide-21
SLIDE 21

asynctest: for unittest pytest-asyncio: for pytest aiotest (test asyncio implementation)

Unit tests

slide-22
SLIDE 22

Trollius is the Python 2 port of asyncio Work on Python 2.6 – 3.5 Use “yield From(...)” instead of “yield from ...” Only a few asyncio libraries are compatible with trollius Only use it if you cannot port your application to Python 3

Trollius

slide-23
SLIDE 23

Ludovic Gasc ran benchmark on Flask, Django and API Hour (asyncio) API Hour is as fast or much faster Best case: API-Hour handles 5x more requests per second JSON serialization: 400k req/s API- Hour vs 70-79k for Django-Flask Details: http://blog.gmludo.eu/

Benchmarks

slide-24
SLIDE 24

Need tutorials and more documentation Port more stdlib modules to asyncio: ftplib, poplib, imaplib, nntplib, smtplib, telnetlib, xmlrpclib, etc. Interoperability with Twisted

How can you help?

slide-25
SLIDE 25

Questions?

http://www.asyncio.org/ github.com/python/asyncio/wiki/ThirdParty

Distributed under CC BY-SA license: http://creativecommons.org/licenses/by-sa/3.0/

Contact :

vstinner@gmail.com