webcamp 2016: python. Михаил Бегерский: Использование asyncio-стека...
TRANSCRIPT
![Page 1: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/1.jpg)
1
![Page 2: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/2.jpg)
About
Python developer @ DataRobot
2
![Page 3: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/3.jpg)
Benchmark [1]
3
![Page 4: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/4.jpg)
Benchmark
4
![Page 5: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/5.jpg)
Database drivers
● aiocouchdb● aiomysql● aioredis● aiozmq● aioes● aiopg● aiokafka● aioodbc● aiomcache
5
![Page 6: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/6.jpg)
SQLAlchemy
6
![Page 7: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/7.jpg)
Faster postgre client?
$ pip install asyncpg
7
![Page 8: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/8.jpg)
Mongo? [2]
8
![Page 9: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/9.jpg)
aiohttp_jinja2
9
![Page 10: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/10.jpg)
aiohttp_debugtoolbar
10
![Page 11: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/11.jpg)
aiohttp_debugtoolbar
$ pip install aiohttp_debugtoolbar
11
![Page 12: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/12.jpg)
aiohttp_debugtoolbar
12
![Page 13: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/13.jpg)
aiohttp_debugtoolbar
13
![Page 14: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/14.jpg)
aiohttp_debugtoolbar
14
![Page 15: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/15.jpg)
aiohttp_session
● SimpleCookieStorage
● EncryptedCookieStorage
● RedisStorage
15
![Page 16: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/16.jpg)
aiohttp_session
16
![Page 17: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/17.jpg)
aiohttp_security
● AbstractIdentityPolicy
● AbstractAuthorizationPolicy
● remember()
● forget()
● authorized_userid()
● permits()
17
![Page 18: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/18.jpg)
aiohttp_security
18
![Page 19: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/19.jpg)
aiohttp_security
19
![Page 20: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/20.jpg)
Slowloris
$ nmap --script http-slowloris-check 127.0.0.1 -p 8080
20
![Page 21: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/21.jpg)
Web-sockets [3]
21
![Page 22: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/22.jpg)
Middleware
22
![Page 23: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/23.jpg)
Middleware
23
![Page 24: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/24.jpg)
aiohttp client [4]
24
![Page 25: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/25.jpg)
aiohttp_admin
25
![Page 26: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/26.jpg)
aiohttp_admin
26
![Page 27: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/27.jpg)
Other tools [5]
● aiohttp_runserver
● aiohttp_cors
● aiohttp_traversal
● aiothrottle
● aiohttp_mako
● and more ...
27
![Page 28: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/28.jpg)
Project structure
28
![Page 29: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/29.jpg)
Debug
$ export PYTHONASYNCIODEBUG=1
● explicit loop
● releasing resources
● awaititng coroutines
$ python script.py -Wdefault
29
![Page 30: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/30.jpg)
Debug
$ Task was destroyed but it is pending!task: <Task pending coro=<fetch_bad() running at demo.py:14> wait_for=<Future pending cb=[Task._wakeup(), BaseSelectorEventLoop._sock_connect_done(10)()]>>
30
![Page 31: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/31.jpg)
Debug
$ ConnectionResetError: [Errno 54] Connect call failed ('127.0.0.1', 8080)
$ OSError: [Errno 24] Too many open files
31
![Page 32: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/32.jpg)
Debug
32
![Page 33: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/33.jpg)
Testing
33
![Page 34: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/34.jpg)
Testing
34
![Page 35: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/35.jpg)
Testing [6]
35
![Page 36: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/36.jpg)
Go production!
$ gunicorn app_module:app --bind localhost:8080 --worker-class aiohttp.worker.GunicornWebWorker
36
![Page 37: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/37.jpg)
Graceful shutdown
37
![Page 38: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/38.jpg)
Production architecture 38
![Page 39: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/39.jpg)
Resources
1. klen.github.io/py-frameworks-bench/
2. emptysqua.re/blog/
3. igordavydenko.com/talks/lvivpy-5/
4. pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html
5. github.com/python/asyncio/wiki/ThirdParty
6. asvetlov.github.io/pytest-slides/
39
![Page 40: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/40.jpg)
Thanks for your attention
https://github.com/kpidata/webcamp16
@bmwant
bmwlog.pp.ua
40
![Page 41: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений](https://reader034.vdocuments.site/reader034/viewer/2022051404/58a3ff971a28ab64528b5f07/html5/thumbnails/41.jpg)
Let’s have some fun!
my-mail [ at ] gmail [ dot ] com
41