Форум сайта python.su
Добрый день, точнее даже утро.
Я недавно начал изучать 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()
Офлайн
fork только под Unix есть
Офлайн