Motor logo by Musho Rodney Alan Greenblat

More than four years ago, I was sitting through a particularly distracted period of meditation. It was a Saturday morning and I was sitting on a meditation cushion next to my girlfriend in her Brooklyn apartment, staring at the wall. I suddenly thought of a technique for turning PyMongo into an async driver without rewriting it from scratch, by using greenlets. That weekend I forked PyMongo and demonstrated a proof of concept to my boss.

Since then, I’ve spun off my async driver as a distinct project called Motor, named for “Mongo + Tornado”. It took me more than a year to release Motor 0.1, amid my other duties at MongoDB. Time passed, life moved on. MongoDB moved from Soho to Times Square, my girlfriend and I moved in together in Stuyvesant Town, and two generations of dwarf hamsters passed through our home. I occasionally released Motor updates. Version 0.5 added support for asyncio and for Python’s new “async” and “await” keywords. Version 0.7 was the most momentous, because it abandoned the idea I’d had while staring at the wall in Jennifer’s apartment: Motor stopped using greenlets, in favor of a thread pool.

Motor 1.0 arrived today. This version wraps PyMongo 3.3 or newer, so it supports the latest MongoDB features and the latest PyMongo API. The move from PyMongo 2 to 3 brings a bunch of breaking API changes, please read Motor 1.0 Migration Guide and the PyMongo 3 changelog carefully!

—A. Jesse Jiryu Davis