Surveying the async networking landscape for Python has me a bit overwhelmed. There's raw async/await in 3.5+, curio, asyncio, gevent, tornado, stackless, and probably others. If you were starting a new project today, without concern for backward compatibility, what would you use? Python 2.x or 3.x solutions please; I know about Erlang/Go/Node but they aren't a good fit for this project.
1. Python 2 is EOL in 2020, don't use it for new projects.
2. async/await it just an API layer on top of a framework. Thus there is no such thing as raw async/await, it has to be used with a framework of some sort (e.g. Python's built-in asyncio).
3. gevent patches the socket library. Terrible idea. Don't use it.
4. What protocols do you need? Twisted probably has the most implemented, but asyncio and tornado have a bunch too, and not always the same ones.
I'd personally use Twisted, but I'm biased insofar as I helped develop it. It has both equivalent of Javascript promises (called Deferreds) and ability to interact with them using async/await if you like that idiom more (http://twistedmatrix.com/documents/current/core/howto/defer-...).
I would use curio to experiment with the concepts because it, unlike the others, isn't based on event-loops, callbacks, futures, etc. This makes it easier to understand what async can become.
Then I would likely switch to gevent or tornado, because more people are involved in those projects.
2. async/await it just an API layer on top of a framework. Thus there is no such thing as raw async/await, it has to be used with a framework of some sort (e.g. Python's built-in asyncio).
3. gevent patches the socket library. Terrible idea. Don't use it.
4. What protocols do you need? Twisted probably has the most implemented, but asyncio and tornado have a bunch too, and not always the same ones.