WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека...

42
1

Transcript of WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека...

Page 1: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

1

Page 2: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

About

Python developer @ DataRobot

2

Page 3: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Benchmark [1]

3

Page 4: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Benchmark

4

Page 6: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

SQLAlchemy

6

Page 7: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Faster postgre client?

$ pip install asyncpg

7

Page 8: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Mongo? [2]

8

Page 9: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_jinja2

9

Page 10: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_debugtoolbar

10

Page 11: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_debugtoolbar

$ pip install aiohttp_debugtoolbar

11

Page 12: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_debugtoolbar

12

Page 13: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_debugtoolbar

13

Page 14: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_debugtoolbar

14

Page 16: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_session

16

Page 18: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_security

18

Page 19: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_security

19

Page 20: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Slowloris

$ nmap --script http-slowloris-check 127.0.0.1 -p 8080

20

Page 21: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Web-sockets [3]

21

Page 22: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Middleware

22

Page 23: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Middleware

23

Page 24: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp client [4]

24

Page 25: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_admin

25

Page 26: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

aiohttp_admin

26

Page 27: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Other tools [5]

● aiohttp_runserver

● aiohttp_cors

● aiohttp_traversal

● aiothrottle

● aiohttp_mako

● and more ...

27

Page 28: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Project structure

28

Page 29: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Debug

$ export PYTHONASYNCIODEBUG=1

● explicit loop

● releasing resources

● awaititng coroutines

$ python script.py -Wdefault

29

Page 30: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

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-стека для разработки веб-приложений.

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-стека для разработки веб-приложений.

Debug

32

Page 33: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Testing

33

Page 34: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Testing

34

Page 35: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Testing [6]

35

Page 36: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Go production!

$ gunicorn app_module:app --bind localhost:8080 --worker-class aiohttp.worker.GunicornWebWorker

36

Page 37: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Graceful shutdown

37

Page 38: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Production architecture 38

Page 40: WebCamp 2016: Python. Михаил Бегерский: Использование asyncio-стека для разработки веб-приложений.

Thanks for your attention

https://github.com/kpidata/webcamp16

[email protected]

@bmwant

bmwlog.pp.ua

40