我正在开发一个客户端-服务器应用程序,每当新客户端连接到服务器时,服务器都会使用该multiprocessing
模块生成一个新进程。它的目标函数是一个获取套接字并进行 I/O 的函数。我遇到的问题是,一旦客户端和服务器上的进程之间的 TCP 连接关闭,我该如何/在哪里放置 .join() 函数调用以结束子进程?我还需要像在 C 中那样在父进程中执行任何 waitpid 吗?
服务器代码:
def new_client(conn_socket):
while True:
message = conn_socket.recv(BUFFER_SIZE)
conn_socket.send(message)
#just echo the message
#how to check to see if the TCP connection is still alive?
#put the .join() here??
def main():
#create the socket
server_socket = socket(AF_INET,SOCK_STREAM)
#bind the socket to the local ip address on a specific port and listen
server_port = 12000
server_socket.bind(('',server_port))
server_socket.listen(1)
#enter in a loop to accept client connections
while True:
connection_socket, client_address = server_socket.accept()
#create a new process with the new connection_socket
new_process = Process(target = new_client, args = (connection_socket,))
new_process.start()
#put the .join() here or what??
if __name__ == '__main__':
main()
thread
同样对于这种设置,在模块中使用线程还是留在进程中会更有利吗?正在开发服务器代码,以便在具有“平均”规格的服务器上大量使用(如何优化此设置)。