I am a full-stack web engineer in Chicago, IL. During the week, I run the Systems Engineering team at Vokal. In my spare time I juggle a wide variety of pet projects, many using the Raspberry Pi or Arduino. I also love discovering new music and chilling out with a great album.
Nothing here yet.
No blogs yet.
@farebord makes some great points. In addition, check out Falcon too: https://falconframework.org/. It's super lightweight and pretty easy to learn. If you're building something like a JSON API I highly recommend it. I've used it with great success, and performance, on both personal and professional projects.
I totally understand the Python 2 support. I've been using Docker for all my local environments for a couple years and using Python 3. I use a separate Python 2 Docker container, mount my code in there and run the Fab scripts there. Then there's no crossing the streams with trying to keep Python 2 and 3 in the same environment as the app runs in its own Python 3 container.
For something simple, running on a single box, I just use Fabric to script out anything I need. That could be as simple as doing a git pull and restarting a service via SSH. I also use it for Docker-based deployments too. For example: CI server builds a Docker image and publishes to a private (or public) registry on merge CI server runs a Fabric script that pulls new Docker image on server and restarts service via SSH For things that need multiple instances, auto-scaling, and a load balancer, I use AWS exclusively. It's really easy to interact with all of their services using the official Python SDK (boto3). Again, I script all of that with Fabric, even if all I do is call AWS services, and never open an SSH connection. This may not be the sexiest way to do things, but I've deployed several apps (Django and other Python frameworks) with this approach and it continues to get the job done for me, even with AWS.
I think the thing that sets it apart is concurrency: goroutines are cheap to create and it's easy to communicate between them using the channel type. I know there are ways to do things concurrently in many languages, but Go's approach makes things easy to reason about in my opinion.