• 一个简单的基于多进程实现并发的Socket程序


      在单进程的socket的程序的基础上,实现多进程并发效果的思路具体是:在server端开启“链接循环”,每建立一次链接就生成一个Process对象进行server-client的互动,而client端不用做任何变化,因为对于client来说每运行一次程序就相当于与server端建立了一个链接。

      具体代码如下:

    # -*- 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)
    Server.py
    # -*- 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'))
    Client.py

      运行效果如下:

      如上图所示:我们可以看到不同进程(由ID标识)的client与server的交互过程~

  • 相关阅读:
    kubernetes Yaml 基本语法
    kubernetes kubesphere 原生安装
    kubernetes 安装
    kubernetes 基础概念
    kubesphere 应用部署概念
    kubesphere 多租户
    centos 安装 docker
    MySQL索引相关知识总结
    论文解读(GSAT)《Interpretable and Generalizable Graph Learning via Stochastic Attention Mechanism》
    论文解读(softmask GNN)《Softmask: Adaptive Substructure Extractions for Graph Neural Networks》
  • 原文地址:https://www.cnblogs.com/paulwhw/p/9104440.html
Copyright © 2020-2023  润新知