SirRis
И еще теоретический вопрос,если у меня,скажем,будет миллион клиентов,подключенных к серверу можно ли использовать алгоритм с сокетами? Или есть какой-нибудь более удачный вариант?
1. По поводу цикла - если не использовать акцепт в цикле при закрытие клиентской программы, сервер закрывает соеденение, а в цикле сервер продолжает ждать инициации.
2. Миллион соеденений

можно использовать потоки (глупо, всему виной GIL, но просто для примера)
import threading
def process(conn, ip):
with conn:
while True:
data = conn.recv(1024)
if not data:
break
print(data.decode('utf-8'))
with socke.socket() as sock:
sock.bind(('127.0.0.1', 8099))
sock.listen()
while True:
conn, ip = sock.accept()
th = threading.Thread(target = process, args=(conn, ip))
th.start()
Потоки + Процессы
import socket
import threading
import multiprocessing
with socket.socket() as sock:
sock.bind(("", 10001))
sock.listen()
workers_count = 3
workers_list = [multiprocessing.Process(target=worker, args=(sock,))
for _ in range(workers_count)]
for w in workers_list:
w.start()
for w in workers_list:
w.join()
def worker(sock):
while True:
conn, addr = sock.accept()
th = threading.Thread(target=process_request, args=(conn, addr))
th.start()
def process_request(conn, addr):
print("connected client:", addr)
with conn:
while True:
data = conn.recv(1024)
if not data:
break
print(data.decode("utf8"))