1

私はチュートリアルに続き、Pythonウェブサーバ:ruslanspivak.com/lsbaws-part3/を書きました。Webサーバー(Python)でマルチプロセスを実装する方法は?

これをクライアントに簡単なWebページを返すと、接続を閉じるには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() 

マルチプロセッシング使用して要求を処理することになっているのpythonウェブサーバのための簡単なコードがあります。 15秒以内に、他のクライアントはWebページに接続して受信できるはずですが、それを行うために他のクライアントが前の子プロセスを終了するのを待たなければならないようです。

これまでの子プロセスが終了するのを待つことなく、少なくとも4-5のクライアントがWebページを取得できる真のマルチプロセスを実装するにはどうすればよいですか?

(もちろん私はスリープ()関数を削除することができますが、それは本当に問題を解決しません)

答えて

0

クライアント

+0

からの接続を受け入れるために、新しいスレッドを使用して、質問は避けたいことが表示されますスレッドの使用と代わりにマルチプロセッシングの使用 – Paul

関連する問題