多进程服务器
1. 多进程服务器
import socket
from multiprocessing import Process
def handle_client(client_sock, client_addr):
while True:
recv_data = client_sock.recv(1024)
if len(recv_data) > 0:
print('recv[%s]:%s' % (str(client_addr), recv_data.decode()))
else:
print('[%s]客户端已经关闭' % str(client_addr))
break
client_sock.close()
def main():
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
address = ('', 8000)
server_sock.bind(address)
server_sock.listen(128)
while True:
print('-----主进程,,等待新客户端的到来------')
client_sock, client_addr = server_sock.accept()
print('-----主进程,,接下来创建一个新的进程负责数据处理[%s]-----' % str(client_addr))
process = Process(target=handle_client, args=(client_sock, client_addr))
process.start()
client_sock.close()
server_sock.close()
if __name__ == '__main__':
main()
2. 总结
- 通过为每个客户端创建一个进程的方式,能够同时为多个客户端进行服务
- 当客户端不是特别多的时候,这种方式还行,如果有几百上千个,就不可取了,因为每次创建进程等过程需要好较大的资源