Найти - Пользователи
Полная версия: ForkingMixIn в SocketServer
Начало » Network » ForkingMixIn в SocketServer
1
HnH
Добрый день, точнее даже утро.
Я недавно начал изучать python (3.1), поэтому вполне возможно что-то упустил из вида. Пытаюсь создать многопроцессный TCP сервер с помощью модуля SocketServer. Для реализации многопоточности и многопроцессности есть 2 mixin'a: ThreadingMixIn и ForkingMixIn. В документации дан пример работы только с ThreadingMixIn, и этот пример у меня замечательно работает, про ForkingMixIn написано следующее: “The ForkingMixIn class is used in the same way, except that the server will spawn a new process for each request.”, что значит, что по сути должно работать абсолютно также. При этом попробывав переделать код под ForkingMixIn вылазит ошибка. Ниже переделаный код и сама ошибка

import socket
import threading
import multiprocessing
import socketserver

class MprocessingTCPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request.recv(1024)
cur_thread = multiprocessing.current_process()
response = bytes("%s: %s" % (cur_thread.name, data),'ascii')
self.request.send(response)

class MprocessingTCPServer(socketserver.ForkingMixIn, socketserver.TCPServer):
pass

def client(ip, port, message):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, port))
sock.send(message)
response = sock.recv(1024)
print("Received: %s" % response)
sock.close()

if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = MprocessingTCPServer((HOST, PORT), MprocessingTCPRequestHandler)
ip, port = server.server_address

server_thread = threading.Thread(target=server.serve_forever)
server_thread.setDaemon(True)
server_thread.start()
print("Server loop running in thread:", server_thread.name)

client(ip, port, b"Hello World 1")
client(ip, port, b"Hello World 2")
client(ip, port, b"Hello World 3")

server.shutdown()


У кого-нибудь есть соображения как заставить его работать?
slav0nic
fork только под Unix есть
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB