Python 此事件已被另一个greenlet使用
我将gunicorn 17.5与Python 此事件已被另一个greenlet使用,python,mysql,gunicorn,greenlets,Python,Mysql,Gunicorn,Greenlets,我将gunicorn 17.5与worker_class=“gevent”,workers=3一起使用,从gunicorn-c config.py my:app开始。我刚刚注意到我的日志中有以下错误 2014-04-01 04:48:49 [4297] [ERROR] Error handling request Traceback (most recent call last): File "/usr/lib/python2.6/site-packages/gunicorn/workers
worker_class=“gevent”,workers=3
一起使用,从gunicorn-c config.py my:app
开始。我刚刚注意到我的日志中有以下错误
2014-04-01 04:48:49 [4297] [ERROR] Error handling request
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/gunicorn/workers/async.py", line 45, in handle
self.handle_request(listener, req, client, addr)
File "/usr/lib/python2.6/site-packages/gunicorn/workers/ggevent.py", line 119, in handle_request
super(GeventWorker, self).handle_request(*args)
File "/usr/lib/python2.6/site-packages/gunicorn/workers/async.py", line 93, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/usr/lib/python2.6/site-packages/beaker/middleware.py", line 155, in __call__
return self.wrap_app(environ, session_start_response)
[...]
File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 1083, in cursor
if not self.is_connected():
File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 696, in is_connected
self.cmd_ping()
File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 665, in cmd_ping
return self._handle_ok(self._send_cmd(ServerCmd.PING))
File "/usr/lib/python2.6/site-packages/mysql/connector/connection.py", line 378, in _send_cmd
return self._socket.recv()
File "/usr/lib/python2.6/site-packages/mysql/connector/network.py", line 170, in recv_plain
packet = self.sock.recv(1)
File "/usr/lib64/python2.6/site-packages/gevent/socket.py", line 432, in recv
wait_read(sock.fileno(), timeout=self.timeout, event=self._read_event)
File "/usr/lib64/python2.6/site-packages/gevent/socket.py", line 165, in wait_read
assert event.arg is None, 'This event is already used by another greenlet: %r' % (event.arg, )
AssertionError: This event is already used by another greenlet: (<Greenlet at 0x37ac190: <functools.partial object at 0x2578788>(<socket at 0x37ab9d0 fileno=14 sock=10.174.17.169:, ('173.228.6.207', 18614))>, timeout('timed out',))
我在网上看到,这表明猴子补丁是在线程导入后完成的。考虑到我提到的情况,你知道怎么会这样吗
如果有帮助的话:我的应用程序在启动时会打开一堆mysql连接,但我不能保证它们会被独占使用——也就是说,我没有一个带有acquire/release语义的连接池,它们只是被传入的客户端请求随机使用。有某种连接池会有帮助吗?如果是,如何确保它与gevent/greenlets配合良好
Exception KeyError: KeyError(36957072,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored