gpt4 book ai didi

python - Tornado 占用全部 CPU 并且并发是 Not Acceptable

转载 作者:可可西里 更新时间:2023-11-01 17:34:50 26 4
gpt4 key购买 nike

代码很简单,这是Tornado的基本用法:

class JustHandler(tornado.web.RequestHandler):
def get(self):
self.write('just get.')

application = tornado.web.Application([
(r"/just", JustHandler),
])
application.listen(7777)
tornado.ioloop.IOLoop.current().start()

然后我写了一个简单的客户端来发送请求:

class Request:
def GetEmpty(self):
try:
req = urllib2.Request('http://localhost:7777/just')
resp = urllib2.urlopen(req, timeout = 15)
file = resp.read()
print 'Get empty'
except Exception,e:
print str(e)

def ReqThread():
req = Request()
while True:
req.GetEmpty()

if __name__ == "__main__":
print 'start.'
threads = []
for i in range(0, 100):
thread = threading.Thread(target = ReqThread)
thread.start()
threads.append(thread)

for thread in threads:
thread.join()
print 'end.'

如你所见,我打开了 100 个线程,每个线程都有无休止的循环请求,然后查看 tornado 的 CPU 使用率,它变为 100%。

如果我尝试增加线程数,某些请求将因超时而失败。

我哪里错了? Tornado 应该同时接受高请求。

我的系统是Ubuntu 14.04,Tornado版本是4.2.1,CPU是E3 1231 v3。

最佳答案

您的代码中没有任何等待时间,实际上您的 CPU 使用率为 100%。您正在发出和处理您的 CPU 可以处理的尽可能多的请求。

您可以在 req.GetEmpty() 之后的循环中添加 time.sleep(1) 以获得 100 个线程的大约 100 个请求/秒(您实际上会得到更少,但您可以调整它)。

关于python - Tornado 占用全部 CPU 并且并发是 Not Acceptable ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34870879/

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