I'm using Graphene (the python port) and stuck it behind Flask (web application server) which hides behind gunicorn (WSGI server, a python generic webapplication interface) which in turn is behind api-umbrella (an api reverse proxy). My main issue at the moment is appropriate caching when considering invalidation and retrieving different related details from different microservices. The dataloader is great but also a headache generator in that sense. But this is more backend related than graphql related.
More graphql related would be how to do proper versioning (remaining backward compatibility) and have different customers (api consumers/frontends) use the same api with slightly different requirements. You could say require different schema's, but that might not be entirely true. Still working on clarity on that.
Big pains for me was the lack of proper documentation in graphene. Also the use of Promises was new to me, and seems less natural in python than in javascript. Since I stick with python there is only graphene and no other library to choose from that compares. (unless someone can point me a library I missed)