多进程socket实现并发连接

#_*_coding:utf-8_*_
#服务器端
from socket import * import subprocess import struct from multiprocessing import Process ip_port=('127.0.0.1',8080) BUFSIZE=1024 tcp_socket_server=socket(AF_INET,SOCK_STREAM) tcp_socket_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) tcp_socket_server.bind(ip_port) tcp_socket_server.listen(5) # # while True: # conn,addr=tcp_socket_server.accept() # print('客户端',addr) def talk(conn,addr): while True: cmd=conn.recv(BUFSIZE) print(cmd.decode('utf-8')) if len(cmd) == 0:break res=subprocess.Popen(cmd.decode('utf-8'),shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) stderr=res.stderr.read() if stderr: back_msg=stderr else: back_msg=res.stdout.read() print(len(back_msg)) conn.send(struct.pack('i',len(back_msg))) #先发送长度 conn.sendall(back_msg) # conn.close() if __name__=='__main__': while True: conn,addr=tcp_socket_server.accept() p=Process(target=talk,args=(conn,addr),name="hello") p.start() #启动一个子进程 print('客户端',addr) print(p.name,p.pid) # 服务端
Process():由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)

强调:
1. 需要使用关键字的方式来指定参数
2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号

客户端 ('127.0.0.1', 64990)
hello 7120                        #2个客户端,启动2个子进程
客户端 ('127.0.0.1', 64991)
hello 7172
dir
777
dir
777

 

 

posted @ 2018-11-17 16:53  986428528  阅读(156)  评论(0编辑  收藏  举报