1

나는 파이썬 웹 서버를 작성하는 튜토리얼을 따라왔다 : ruslanspivak.com/lsbaws-part3/.웹 서버 (파이썬)에서 다중 처리를 구현하는 방법은 무엇입니까?

이 클라이언트로 간단한 웹 페이지를 반환하고 연결을 종료 15 초 동안 기다리하도록되어

import os 
import socket 
import time 

SERVER_ADDRESS = (HOST, PORT) = '', 8888 
REQUEST_QUEUE_SIZE = 15 

file = open("test.html", "r") 
http_response = file.read() 

def handle_request(client_connection): 
    request = client_connection.recv(1024) 

    print(
     'Child PID: {pid}. Parent PID {ppid}'.format(
      pid=os.getpid(), 
      ppid=os.getppid(), 
     ) 
    ) 
    #print(request.decode()) 
    '''http_response = b"""\ 
HTTP/1.1 200 OK 

Hello, World! 
"""''' 
    client_connection.sendall(http_response) 
    time.sleep(15) 


def serve_forever(): 
    listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    listen_socket.bind(SERVER_ADDRESS) 
    listen_socket.listen(REQUEST_QUEUE_SIZE) 
    print('Serving HTTP on port {port} ...'.format(port=PORT)) 
    print('Parent PID (PPID): {pid}\n'.format(pid=os.getpid())) 

    while True: 
     client_connection, client_address = listen_socket.accept() 
     #print "parent is now accepting new clients" 
     pid = os.fork() 
     if pid == 0: # child 
      #print "aaaaaaaa", pid, "aaaaaaa" 
      listen_socket.close() # close child copy 
      handle_request(client_connection) 
      client_connection.close() 
      print ("child {pid} exits".format(pid=os.getpid())) 
      os._exit(0) # child exits here 

     else: # parent 
      print "parent process continues" 
      client_connection.close() # close parent copy and loop over 

if __name__ == '__main__': 
    serve_forever() 

멀티 프로세싱을 사용하여 요청을 처리하도록되어 파이썬 웹 서버에 대한 간단한 코드가있다. 15 초 동안 다른 클라이언트는 여전히 웹 페이지에 연결하여 수신 할 수 있어야하지만 다른 클라이언트가이를 수행하기 위해 이전 하위 프로세스가 끝날 때까지 기다려야하는 것처럼 보입니다.

적어도 4-5 명의 클라이언트가 이전 하위 프로세스가 끝날 때까지 기다리지 않고 웹 페이지를 가져올 수있는 진정한 다중 처리를 구현하려면 어떻게해야합니까?

(물론 내가 슬립() 함수를 제거 할 수 있습니다,하지만 그건 정말 문제가 해결되지 것)

답변

0

를 사용하여 클라이언트로부터의 연결을 수락 할 수있는 새로운 스레드를

질문이를 방지하고자하는 것으로 보인다
+0

스레드 사용 및 대신 다중 처리 사용 – Paul