P G Jones

My talks About Software Development

An ASGI Server from scratch

I intend for this to be a fairly advanced talk that shows the steps required to go from a TCP echo server to a basic HTTP/1 ASGI server using asyncio for the IO. This is aimed at people who've read about asyncio, coroutines, etc and want to see them used in practice.

This is a tutorial on how to build a HTTP/1 ASGI server using asyncio. I plan to start by building a TCP echo server and then add HTTP parsing and ASGI compliance.

Read Slides →

Async Flask, an introduction to Quart

Quart is the Flask API re-implemented in async/await. This talk will introduce Quart and explain how it relates to Flask. Then I'll talk about potential async support in Flask and discuss the future relationship between the Quart and Flask.

Watch →
Read Slides →

Web development with Trio

The introduction of asyncio to the Python stdlib led to a flurry of new web frameworks. Lesser known though are the async/await based event loop alternatives to asyncio, curio, and trio. Yet the development of asyncio has been and continues to be, heavily influenced by these two projects.

This talk will introduce Trio and motivate why I think it is a great choice for web development. I'll talk about the advantages trio brings and the ecosystem available to developers. As a practical example I'll show my own site (frontend React + backend Quart-Trio).

Read Slides →

An introduction to ASGI, Asynchronous Server Gateway Interface

WSGI has been a huge success, allowing for an ecosystem of servers and frameworks to exist and develop independently, however, WSGI is unable to support websockets or the new async/await syntax. ASGI is the asynchronous spiritual successor to WSGI, with websockets and async support built in.

Watch →
Read Slides →

Async web servers; design and implementation

In this talk I'll describe an idealised process I've gone through developing Hypercorn. I'll define the aims of a modern async web server, overview the tooling used to be async, and finally the constraints imposed by the event loop choice.

Read Slides →

Quart; an ASGI alternative to Flask

Flask is a great web micro-framework, that is best utilised with event-loop concurrency. Sadly with Flask the event-loop framework can’t be asyncio, although some extensions (Flask-Aiohttp) have tried. Quart is the solution as it shares the Flask API and is based on asyncio. In addition Quart goes beyond Flask adding HTTP/2 and websockets.

This talk will outline why ASGI is a good asynchronous version of WSGI, and then give an overview of Quart, demonstrating features that go beyond the Flask framework.

Watch →
Read Slides →

Quart; a asyncio alternative to Flask

Flask is a great web mirco-framework, that is best utilised with event-loop concurrency. Sadly with Flask the event-loop framework can’t be asyncio, although some extensions (Flask-Aiohttp) have tried. Quart is the solution as it shares the Flask API and is based on asyncio. In addition Quart goes beyond Flask adding HTTP/2 and websockets.

This talk will outline why event-loop concurrency is a good choice for web servers, why asyncio is a good choice and then give an overview of Quart, demonstrating features that go beyond the Flask framework.

Watch →
Read Slides →

Building Quart from Flask and Asyncio

The Python world is moving towards asyncio web (micro) frameworks, with Sanic and Aiohttp leading the way. Sadly the best (IMO) micro framework, Flask, is incompatible with asyncio. The Quart framework aims to solve this by reimplementing the Flask API using asyncio.

I intend to talk about the lessons and difficulties encountered with Flask, Asyncio and the combination. Detailing the difficulties calling coroutines from synchronous functions, and the eventual workaround, how the crux of Flask, global thread locals, have equivalents and how they work, finishing with a discussion about how Python monkey patching allows for some of the Flask extensions to work.

Watch →
Read Slides →