Overview
Syllabus
Intro
Release Manager
Deployed with runners that run many copies using threads or processes
use safely (without race conditions)
Thread memory overhead: 32kB to 8MB per thread
The approach of Twisted, Tornado, asyncio, curio
Identical system call at their core: Selector functions
Selector functions take a list of file descriptors (e.g. sockets, open files) and tell you what is ready for reading or writing
Selector loops can handle thousands of open sockets and events
Data is channeled through a transport to a protocol implementation (e.g. HTTP)
Sending data is queued until the network is ready
Higher density per core No threads required! Concurrency, not parallelism
You're probably waiting on the client or the database
coroutines are a special generator
Repairing library API fragmentation
It should be easy for (Python 3.3 ports of) frameworks like Twisted, Tornado, or even gevent to either adapt the default event loop implementation to their needs using a lightweight adapter or proxy, or to replace the default event loop implementation with an adaptation of their own event loop implementation.
Reducing duplication
For this interoperability to be effective, the preferred direction of adaptation in third party frameworks is to keep the default event loop and adapt it to the framework's API. Ideally all third party frameworks would give up their own event loop implementation in favor of the standard implementation.
asyncio is an apple Twisted is a fruit salad
Tornado is a great example of interoperation
Asynchronous code executed in a synchronous style
Why Twisted is still worth using
Time based releases, taken off our trunk branch
Super easy to make your own protocols!
Established library support
Code review Automated testing Thousands of tests
Python 3.4/3.5 is coming to Windows soon!
Taught by
EuroPython Conference