【python开发】并发编程和网络编程的结合+并发和并行概念区别+单例模式通过类来实现

发布于:2024-03-21 ⋅ 阅读:(76) ⋅ 点赞:(0)

一、并发编程&网络编程

网络编程:基于网络基础知识、socket模块实现网络的数据传输;
并发编程:基于多进程、多线程等来提升程序的执行效率。

但在很多框架的内部其实会让两者结合,使用多进程和多线程来提高网络编程的处理效率。

(一)多线程socket服务端

服务端:

# 收发数据
def task(conn):
    while True:
        client_data = conn.recv(1024)
        data = client_data.decode('utf-8')
        print("收到客户端发来的信息", data)
        if data.upper() == 'Q':
            break
        conn.sendall("收到收到".encode('utf-8'))
    conn.close()


# 连接服务器
def run():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('127.0.0.1', 8001))
    sock.listen(5)
    while True:
        # 等待客户端连接(主线程)
        conn, addr = sock.accept()

        # 创建子线程
        t = threading.Thread(target=task, args=(conn,))
        t.start()

    socket.close()


if __name__ == '__main__':
    run()

客户端

import socket


#向指定ip发送连接请求
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8001))



while True:
    txt = input(">>>")
    client.sendall(txt.encode('utf-8'))
    if txt.upper() == "Q":
        break

    reply = client.recv(1024)
    print(reply.decode('utf-8'))


#关闭连接,关闭连接时会向服务端发出空数据
client.close()

(二)多进程&socket服务端

服务端:

import socket
import multiprocessing




def task(conn):
    while True:
        client_data = conn.recv(1024)
        data = client_data.decode('utf-8')
        print("收到客户端发来的消息:", data)
        if data.upper == 'Q':
            break
        conn.sendall("收到收到".encode('utf-8'))




def run():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('127.0.0.1', 8001))
    sock.listen(5)
    while True:
        #等待客户端来连接
        conn, addr = sock.accept()
        #创建子进程
        t = multiprocessing.Process(target=task, args=(conn, ))
        t.start()
    sock.close()
    
    
if __name__ == '__main__':
    run()

客户端

import socket


#向指定ip发送连接请求
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8001))



while True:
    txt = input(">>>")
    client.sendall(txt.encode('utf-8'))
    if txt.upper() == "Q":
        break

    reply = client.recv(1024)
    print(reply.decode('utf-8'))


#关闭连接,关闭连接时会向服务端发出空数据
client.close()

二、并发和并行

串型:多个任务排队按照先后顺序逐一执行;

并发:假设有多个任务,只有一个CPU,同一时刻只能处理一个任务,为了避免串行,让CPU每个任务都执行一点,然后再切换,达到并发效果(看似都在同时进行)。
python代码有:协程、多线程。

并行:假设有多个任务,有多个CPU,那么同一时刻每个CPU都执行一个任务,任务可以真正的同时运行。并行在python代码中体现为:多进程。

三、单例模式

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到