Вероятно, стоит понять, какие блокируют системные вызовы, а какие нет. Например, listen
не блокирует, а accept
блокирует. Так что в основном - вы создали один процесс через Process(..)
, который блокирует на accept
, а когда соединение установлено - обрабатывает это соединение.
Ваш код должен иметь структуру - что-то вроде следующего (псевдокод)
def handle_connection(accepted_socket):
# do whatever you want with the socket
pass
def server():
# Create socket and listen to it.
sock = socket.socket(....)
sock.bind((HOST, PORT))
sock.listen(5)
while True:
new_client = sock.accept() # blocks here.
# unblocked
client_process = Process(target=handle_connection, args=(new_client))
client_process.start()
Я также должен упомянуть, хотя это хороший способ просто понять, как все можно сделать, но не стоит начинать новый процесс для каждого соединения.