Ниже приведен код сервера eventlet. Я хочу сделать Non-blocking IO. Чтобы проверить неблокирующий 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-го числа, будет напечатан только другой вывод меньшего числа. Есть ли способ сделать тот же код «параллельным» или «параллелизмом».