gpt4 book ai didi

Python 消耗 99% 的 CPU 运行 eventlet

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:40 25 4
gpt4 key购买 nike

我已经在 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,所以肯定不是吗?

最佳答案

如果 listener.accept() 是非阻塞的,您应该让线程休眠一小段时间,以便 os 调度程序可以将工作分派(dispatch)给其他进程。通过放置

time.sleep(0.03)

while True 循环结束时。

关于Python 消耗 99% 的 CPU 运行 eventlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com