Also, generally avoiding c-extensions for talking to databases unless they have explicit support for greenlets is advisable.
My main webapp currently is Flask on gunicorn with async gevent workers. Mix in Flask-Sockets (using gevent-websocket) and I have websocket support as well and use redis pubsub as a broker to communicate intraprocess. It's a nice and capable system and you can reach into gevent if you want to do scatter-gather sorts of patterns without dealing with threads.
When you use gevent to run explicit green threads, you do NOT monkey patch - you call the library functions. You only monkey patch if you want stuff happening for free. Which also works pretty well in production with gunicorn.. and yes with celery.
gevent is officially supported by celery - https://github.com/celery/celery/tree/master/examples/gevent
http://docs.celeryproject.org/en/latest/_modules/celery/conc...
Gevent works in production with celery and even newrelic works with pretty OK (not perfect)
When we are talking about production systems, I need the whole ecosystem to work. So I'd rather use vanilla Python with few libraries like gevent.
or Gevent - which is built on libev and provides constructs like queues, etc to make your multi-processing life much better.