0
토네이도 프레임 워크가있는 python http 서버가 있습니다. 여러 요청 후에는 사용할 수 없게됩니다. 브라우저 페이지에서 사용할 수 없습니다. 약 20 초 동안 사용하지 않으면 다시 작동하기 시작합니다.파이썬 토네이도 서버가 연결을 끊습니다
약 10 개의 예외가 포함 된 쿼리가 약 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 개 요청의 값을 포착 ver (처리 안 함). 이 값은 토네이도를 실행하는 프로세스의 수에 의존하지 않습니다. nginx를 프록시 서버로 추가하는 것은 도움이되지 않습니다.서버는 우분투 서버 12.04 및 linux mint 16에서 실행되었습니다.이 한계는 데비안 운영 체제에 따라 달라집니다.
토네이도는 단일 스레드입니다. 서버로 백업하는 요청은 모두 처리 할 수 없습니다. http://papercruncher.com/2013/01/15/truly-async-with-tornado/ – dm03514
클라이언트에서 다음 메시지를 보냅니다. 포트 4400에서 실행되는 단일 프로세스에만 요청합니다. 아마도 서버 프로세스 수를 변경할 때 아무런 차이가 없음을 알 수 있습니다. – Eugen
호기심 부족 : 각 요청마다 1000 자 대신 하나의 문자 만 반환하면 초당 요청 수가 수만 개로 증가할까요? – Eugen