다음은 이벤트 릿 서버의 코드입니다. 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 번째 숫자의 출력이 계산 된 후 다른 작은 숫자 출력 만 인쇄됩니다. 동일한 코드를 "동시"또는 "병렬화"하는 방법이 있습니까?