我已经发布到 python 和 eventlet 邮件列表,所以如果我看起来不耐烦,我深表歉意。
我在小型(非微型)保留的 ubuntu 11.10 aws 实例上运行 eventlet 0.9.16。
我有一个套接字服务器,它类似于 eventlet 文档中示例中的 echo 服务器。当我第一次开始运行代码时,一切似乎都很好,但我注意到在 10 或 15 小时后,cpu 使用率从大约 1% 变为 99+%。那时我无法与套接字服务器建立进一步的连接。
这是我正在运行的代码:
def socket_listener(self, port, socket_type):
L.LOGG(self._CONN, 0, H.func(), 'Action:Starting|SocketType:%s' % socket_type)
listener = eventlet.listen((self._host, port))
listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
pool = eventlet.GreenPool(20000)
while True:
connection, address = listener.accept()
connection.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
L.LOGG(self._CONN, 0, H.func(), 'IPAddress:%s|GreenthreadsFree:%s|GreenthreadsRunning:%s' % (str(address[0]), str(pool.free()),str(pool.running())))
pool.spawn_n(self.spawn_socketobject, connection, address, socket_type)
listener.shutdown(socket.SHUT_RDWR)
listener.close()
L.LOGG 方法只是将提供的参数记录到 mysql 表中。
我在这样的线程中运行socket_listener:
def listen_phones(self):
self.socket_listener(self._port_phone, 'phone')
t_phones = Thread(target = self.listen_phones)
t_phones.start()
从我最初的谷歌搜索中,我认为这个问题可能类似于https://lists.secondlife.com/pipermail/eventletdev/2008-October/000140.html报告的错误,但我使用的是新版本的 eventlet不可能吗?