繁体   English   中英

Python龙卷风服务器失去连接

[英]Python tornado server loses the connections

我有一个带有龙卷风框架的python http服务器。 在几次请求后,它变得不可用。 在浏览器页面中也不可用。 闲置约20秒钟后,它将重新开始工作。

100,000个查询包含大约10个异常。 在此负载下,服务器进程消耗约30%的CPU。

为什么服务器不可用?

服务器:

start_port = 4400
workers = 1

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        data = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(1000))
        self.write(data)


def server_process(port):
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])

    http_server = tornado.httpserver.HTTPServer(application)

    http_server.listen(port)
    tornado.ioloop.IOLoop.instance().start()


if __name__ == "__main__":
    for i in xrange(workers):
        port = start_port + i
        print 'process started on %d port' % port
        p = Process(target=server_process, args=(port,))
        p.start()

客户:

def f():
    for i in xrange(500000):
        try:
            r = requests.get('http://127.0.0.1:4400')
            if i % 100 == 0:
                print i, str(r.text)
        except:
            print traceback.format_exc()
            time.sleep(5)


if __name__ == '__main__':
    for j in xrange(1):
        p = Process(target=f)
        p.start()

追溯:

Traceback (most recent call last):
  File "/home/me/PycharmProjects/test/client.py", line 16, in f
    if i % 100 == 0:
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 383, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 486, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 378, in send
    raise ConnectionError(e)
ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=4400): Max retries exceeded with url: / (Caused by <class 'socket.error'>: [Errno 99] Cannot assign requested address)

更新:

实验性地选择了硬件服务器(未处理)每秒300个请求的值。 该值不取决于运行龙卷风的进程数。 将nginx添加为代理服务器无济于事。

服务器在ubuntu服务器12.04和linux mint 16上运行。看来此限制取决于debian操作系统。

问题解决了。 对于多个龙卷风进程,Multiprocessing.Process是一个坏主意。 我正在使用tornado.process。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM