Trying to implement a “clean architecture” (https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html) with asyncio’s explicit concurrency style happened to be very cumbersome and inconvenient. async and await keywords had to be inserted inside the application layer so that the injected implementations of the abstract services needed could work as expected. However this made the application (business logic) much harder to test, as every async function returns a coroutine object and you get multiple “RuntimeWarning: coroutine ‘myfunc’ was never awaited” when called. By using Gevent, this subtleties disappear and proper abstractions and implementations can be set in place and tested independently. I’m too waiting for a middle ground: Gevent running on top of asyncio, maybe? Thanks for this blog post!
