title: Gunicorn+flask+pymongo+gevent hangs on initialization
body: <p>Simple test app:</p>
  
  <pre><code>from gevent import monkey
  monkey.patch_all()
  
  from pymongo import Connection, MongoClient
  from flask import Flask, make_response
  
  app = Flask(__name__)
  print "connect"
  connection = MongoClient("host1, host2, host3", 27017, max_pool_size=4, **{"connectTimeoutMS": 3000, "socketTimeoutMS": 3000, "use_greenlets": True})
  print "db"
  db = connection.barn_2
  
  @app.route('/')
  def hello_world():
      return make_response("Hello world!", 200, {'Content-type': 'application/json; charset=UTF-8'})
  
  if __name__ == '__main__':
      app.run()
  </code></pre>
  
  <p>Works perfectly if it's run as a standalone app:</p>
  
  <pre><code>shcheklein@hostname:~$ python test.py
  connect
  db
   * Running on http://127.0.0.1:5000/
  127.0.0.1 - - [07/Apr/2014 13:07:31] "GET / HTTP/1.1" 200 -
  ^CKeyboardInterrupt
  </code></pre>
  
  <p>But fails to start with gunicorn:</p>
  
  <pre><code>shcheklein@hostname:~$ gunicorn -w 1 -k gevent -t 5 --debug test:app
  2014-04-07 13:15:04 [9752] [INFO] Starting gunicorn 18.0
  2014-04-07 13:15:04 [9752] [INFO] Listening at: http://127.0.0.1:8000 (9752)
  2014-04-07 13:15:04 [9752] [INFO] Using worker: gevent
  2014-04-07 13:15:04 [9757] [INFO] Booting worker with pid: 9757
  connect
  2014-04-07 13:15:09 [9752] [CRITICAL] WORKER TIMEOUT (pid:9757)
  2014-04-07 13:15:09 [9752] [CRITICAL] WORKER TIMEOUT (pid:9757)
  2014-04-07 13:15:10 [9787] [INFO] Booting worker with pid: 9787
  connect
  2014-04-07 13:15:15 [9752] [CRITICAL] WORKER TIMEOUT (pid:9787)
  2014-04-07 13:15:15 [9752] [CRITICAL] WORKER TIMEOUT (pid:9787)
  2014-04-07 13:15:16 [9809] [INFO] Booting worker with pid: 9809
  connect
  2014-04-07 13:15:21 [9752] [CRITICAL] WORKER TIMEOUT (pid:9809)
  2014-04-07 13:15:21 [9752] [CRITICAL] WORKER TIMEOUT (pid:9809)
  2014-04-07 13:15:22 [9830] [INFO] Booting worker with pid: 9830
  </code></pre>
  
  <p><strong>Some notes:</strong></p>
  
  <ul>
  <li>it works perfectly if gevent is turned off (monkey patching and gunicorn worker class)</li>
  <li>it works if db object is created per every incoming request</li>
  <li>versions: gevent 1.0, gunicron 18.0, pymongo 2.6.2, flask 0.9, python 2.6.5 </li>
  </ul>
  
  <p>I doubt that this is a proper way to initialize and share a database pool. Still, I can't find anywhere if there is any other way to share an object between requests.</p>