2011-08-20 3 views
1

필자는 파이썬 토네이도를 선택 서버로 사용하기로 결정했으며 토네이도의 기능을 테스트하기 위해 Python 토네이도 구현에 대해 httpref를 실행하고있었습니다. 여기에 내가 서로 실행 코드의 두 가지가 있습니다 :Tornado의 ioloop과 httpserver의 성능 차이는 무엇입니까?

iostream :

import errno 
import functools 
import socket 
from tornado import ioloop, iostream 

def connection_ready(sock, fd, events): 
    while True: 
     try: 
      connection, address = sock.accept() 
     except socket.error, e: 
      if e[0] not in (errno.EWOULDBLOCK, errno.EAGAIN): 
       raise 
      return 
     connection.setblocking(0) 
     stream = iostream.IOStream(connection) 
     message = "You requested %s\n" % "hi" 
     stream.write("HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s" % (len(message), message), stream.close) 


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) 
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
sock.setblocking(0) 
sock.bind(("", 8011)) 
sock.listen(5000) 

io_loop = ioloop.IOLoop.instance() 
callback = functools.partial(connection_ready, sock) 
io_loop.add_handler(sock.fileno(), callback, io_loop.READ) 
try: 
    io_loop.start() 
except KeyboardInterrupt: 
    io_loop.stop() 
    print "exited cleanly" 

HTTP 서버 :

from tornado import httpserver 
from tornado import ioloop 

def handle_request(request): 
    message = "You requested %s\n" % "hi" 
    request.write("HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s" % (len(message), message)) 
    request.finish() 


http_server = httpserver.HTTPServer(handle_request) 
http_server.bind(8012) 
http_server.start(0) 

try: 
    ioloop=ioloop.IOLoop.instance() 
    ioloop.start() 
except KeyboardInterrupt: 
    ioloop.stop() 

(참고 : 첫 번째 구현 http://nichol.as/asynchronous-servers-in-python에서 가져온 것입니다)

내가 돌아 오는 결과가 걱정된다. httperf --server=localhost --port=8011 --rate=4000 --num-conns=80000 :

,363,210

iostream :

Reply rate [replies/s]: min 3852.3 avg 3973.1 max 4094.5 stddev 112.3 (4 samples) 
Reply time [ms]: response 12.2 transfer 0.0 
[...] 
Errors: total 499 client-timo 0 socket-timo 0 connrefused 0 connreset 0 
Errors: fd-unavail 499 addrunavail 0 ftab-full 0 other 0 

HTTP 서버 :

Reply rate [replies/s]: min 0.0 avg 1280.7 max 2138.5 stddev 962.8 (4 samples) 
Reply time [ms]: response 334.6 transfer 0.0 
[...] 
Errors: total 51697 client-timo 0 socket-timo 0 connrefused 0 connreset 0 
Errors: fd-unavail 47569 addrunavail 0 ftab-full 0 other 4128 

아무도 iostream이 HttpServer에 비해 훨씬 더 수행하는 이유에 대한 좋은 설명이 있습니까? 미리 감사드립니다!

답변

1

오류 : FD-가능하지 않은 47,569

이 컴퓨터 파일 기술자의 부족을 의미합니다.

귀하의 httperf가 (가) 실패했습니다.

+0

나는 그 사실을 몰랐다. XD 덕분. –

관련 문제