在單進程的socket的程序的基礎上,實現多進程併發效果的思路具體是:在server端開啓「連接循環」,每創建一次連接就生成一個Process對象進行server-client的互動,而client端不用作任何變化,由於對於client來講每運行一次程序就至關於與server端創建了一個連接。併發
具體代碼以下:socket
# -*- coding: utf-8 -*- # -*- Author: WangHW -*- import socket import os from multiprocessing import Process #多進程開啓的程序 def talk(conn): # 通訊循環 while 1: try: data = conn.recv(1024) if not data: break print('client <%s> data:%s' %(os.getpid(),data.decode('utf-8'))) conn.send(data.upper()) except ConnectionResetError: break conn.close() #socket創建鏈接循環的程序 def server(ip,port): whw_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) whw_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) whw_server.bind((ip,port)) whw_server.listen(5) # 連接循環 while 1: conn, addr = whw_server.accept() #生成對象,每創建一個連接就啓動一個進程 p = Process(target=talk,args=(conn,)) p.start() if __name__ == '__main__': server('127.0.0.1',9000)
# -*- coding: utf-8 -*- # -*- Author: WangHW -*- import socket whw_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) whw_client.connect(('127.0.0.1',9000)) while 1: msg = input('>>>:').strip() if not msg: continue whw_client.send(msg.encode('utf-8')) data = whw_client.recv(1024) print('Server Data:',data.decode('utf-8'))
運行效果以下:ide
如上圖所示:咱們能夠看到不一樣進程(由ID標識)的client與server的交互過程~spa