Asynchronous version using gevent