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ページを取得できる真のマルチプロセスを実装するにはどうすればよいですか?
(もちろん私はスリープ()関数を削除することができますが、それは本当に問題を解決しません)
からの接続を受け入れるために、新しいスレッドを使用して、質問は避けたいことが表示されますスレッドの使用と代わりにマルチプロセッシングの使用 – Paul