<legend id='tX79N'><style id='tX79N'><dir id='tX79N'><q id='tX79N'></q></dir></style></legend>

    <tfoot id='tX79N'></tfoot>

    1. <small id='tX79N'></small><noframes id='tX79N'>

    2. <i id='tX79N'><tr id='tX79N'><dt id='tX79N'><q id='tX79N'><span id='tX79N'><b id='tX79N'><form id='tX79N'><ins id='tX79N'></ins><ul id='tX79N'></ul><sub id='tX79N'></sub></form><legend id='tX79N'></legend><bdo id='tX79N'><pre id='tX79N'><center id='tX79N'></center></pre></bdo></b><th id='tX79N'></th></span></q></dt></tr></i><div id='tX79N'><tfoot id='tX79N'></tfoot><dl id='tX79N'><fieldset id='tX79N'></fieldset></dl></div>

      • <bdo id='tX79N'></bdo><ul id='tX79N'></ul>
    3. python 简单搭建阻塞式单进程,多进程,多线程服务的实例

      时间:2023-12-16

      1. <i id='mAeKD'><tr id='mAeKD'><dt id='mAeKD'><q id='mAeKD'><span id='mAeKD'><b id='mAeKD'><form id='mAeKD'><ins id='mAeKD'></ins><ul id='mAeKD'></ul><sub id='mAeKD'></sub></form><legend id='mAeKD'></legend><bdo id='mAeKD'><pre id='mAeKD'><center id='mAeKD'></center></pre></bdo></b><th id='mAeKD'></th></span></q></dt></tr></i><div id='mAeKD'><tfoot id='mAeKD'></tfoot><dl id='mAeKD'><fieldset id='mAeKD'></fieldset></dl></div>

        <small id='mAeKD'></small><noframes id='mAeKD'>

        <legend id='mAeKD'><style id='mAeKD'><dir id='mAeKD'><q id='mAeKD'></q></dir></style></legend>
        • <bdo id='mAeKD'></bdo><ul id='mAeKD'></ul>

            <tbody id='mAeKD'></tbody>

            <tfoot id='mAeKD'></tfoot>

              • 当我们需要开发一个服务时,我们可能需要采用不同的方式来完成这个服务,比如运行一个阻塞式单进程、多进程或者多线程服务。在Python中,我们可以使用不同的库来完成这些任务。

                以下是Python搭建阻塞式单进程、多进程和多线程服务的完整攻略。

                阻塞式单进程服务

                阻塞式单进程服务是指只有一个进程在处理请求,而所有的请求都是按顺序依次处理的。一旦开始处理一个请求,进程就会被阻塞住直到请求处理完毕。

                下面是一个使用Python标准库搭建阻塞式单进程服务的示例:

                import socket
                
                HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
                PORT = 65432        # Port to listen on (non-privileged ports are > 1023)
                
                with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
                    s.bind((HOST, PORT))
                    s.listen()
                    conn, addr = s.accept()
                    with conn:
                        print('Connected by', addr)
                        while True:
                            data = conn.recv(1024)
                            if not data:
                                break
                            conn.sendall(data)
                

                这个示例代码使用了socket模块来创建一个TCP服务器,然后在一个无限循环中等待客户端连接,当有客户端连接时,将数据收到缓冲区,当收到的数据为空时,则停止收取数据,进入发送阶段,将缓冲区的数据全部发送回客户端。

                多进程服务

                多进程服务是指使用多个进程来处理请求。这种服务可以提高并发性能,因为多个进程可以同时处理多个请求。

                下面是一个使用Python标准库搭建多进程服务的示例:

                import socket
                import os
                
                def handle_request(conn, addr):
                    with conn:
                        print('Connected by', addr)
                        while True:
                            data = conn.recv(1024)
                            if not data:
                                break
                            conn.sendall(data)
                
                def main():
                    HOST = '0.0.0.0' # Bind to all interfaces
                    PORT = 65432     # Port to listen on (non-privileged ports are > 1023)
                
                    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
                        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
                        s.bind((HOST, PORT))
                        s.listen()
                
                        while True:
                            conn, addr = s.accept()
                
                            pid = os.fork()
                
                            if pid == 0:
                                # Child process
                                s.close()
                                handle_request(conn, addr)
                                conn.close()
                                os._exit(0)
                            else:
                                # Parent process
                                conn.close()
                
                if __name__ == '__main__':
                    main()
                

                这个示例代码使用了socket模块来创建一个TCP服务器,然后在一个无限循环中等待客户端连接。当有客户端连接时,创建一个子进程来处理连接。父进程则关闭连接,继续等待下一个连接。

                多线程服务

                多线程服务是指使用多个线程来处理请求。这种服务可以提高并发性能,因为多个线程可以同时处理多个请求。

                下面是一个使用Python标准库搭建多线程服务的示例:

                import socket
                import threading
                
                def handle_request(conn, addr):
                    with conn:
                        print('Connected by', addr)
                        while True:
                            data = conn.recv(1024)
                            if not data:
                                break
                            conn.sendall(data)
                
                def main():
                    HOST = '127.0.0.1' # Standard loopback interface address (localhost)
                    PORT = 65432       # Port to listen on (non-privileged ports are > 1023)
                
                    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
                        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
                        s.bind((HOST, PORT))
                        s.listen()
                
                        while True:
                            conn, addr = s.accept()
                
                            t = threading.Thread(target=handle_request, args=(conn, addr))
                            t.start()
                
                if __name__ == '__main__':
                    main()
                

                这个示例代码使用了socket模块来创建一个TCP服务器,然后在一个无限循环中等待客户端连接。当有客户端连接时,创建一个新线程来处理连接。

                以上是三种不同方式搭建Python服务的示例,可以根据实际场景选择最适合的方式来处理。

                上一篇:Python实现多线程下载文件的代码实例 下一篇:Python多线程编程(五):死锁的形成

                相关文章

                <tfoot id='cjhOn'></tfoot>

                  <small id='cjhOn'></small><noframes id='cjhOn'>

                  1. <i id='cjhOn'><tr id='cjhOn'><dt id='cjhOn'><q id='cjhOn'><span id='cjhOn'><b id='cjhOn'><form id='cjhOn'><ins id='cjhOn'></ins><ul id='cjhOn'></ul><sub id='cjhOn'></sub></form><legend id='cjhOn'></legend><bdo id='cjhOn'><pre id='cjhOn'><center id='cjhOn'></center></pre></bdo></b><th id='cjhOn'></th></span></q></dt></tr></i><div id='cjhOn'><tfoot id='cjhOn'></tfoot><dl id='cjhOn'><fieldset id='cjhOn'></fieldset></dl></div>

                    • <bdo id='cjhOn'></bdo><ul id='cjhOn'></ul>
                  2. <legend id='cjhOn'><style id='cjhOn'><dir id='cjhOn'><q id='cjhOn'></q></dir></style></legend>