2016-12-25 1 views
1

다음은 이벤트 릿 서버의 코드입니다. Non-blocking IO를하고 싶습니다. 비 차단 입출력을 테스트하기 위해 아래 코드를 서버로 사용했습니다. 여러 클라이언트가 eventlet을 사용하여 비 차단 IO 코드가 필요합니다.

import eventlet 
from eventlet.green import socket 


def fib(n): 
    if n == 1 or n == 2: 
     return 1 

    return (fib(n-1) + fib(n-2)) 

def handle_socket(reader, writer): 
    print ("client connected") 
    while True: 
     line = reader.readline() 
     if not line: 
      break 
     writer.write(line) 
     writer.flush() 
     n = line.rstrip() 
     print ("echoed", int(n)) 
     print(fib(int(n))) 
    print ("disconnected") 

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server.bind(('', 6000)) 
server.listen(100) 
print ("server listening on port 6000") 
print('called me...') 

while True: 
    sock, addr = server.accept() 

    eventlet.spawn(handle_socket, sock.makefile('r'), sock.makefile('w')) 

telnet localhost 6000 
35 

는 35 피보나치 시리즈 번호를 얻으려면 내 노트북에 약 15secs 소요, 아래 단계했다 (창에), 클라이언트 측에서 테스트합니다. 한편, 다른 터미널을 열어 5 또는 6 (2/3 초 걸림)과 같은 작은 피보나치 수를 입력하십시오. 그러나이 서버 코드는 순차적으로 실행되며 35 번째 숫자의 출력이 계산 된 후 다른 작은 숫자 출력 만 인쇄됩니다. 동일한 코드를 "동시"또는 "병렬화"하는 방법이 있습니까?

답변