1.socket
Python用socket模块可以实现简单的网络通信
1.1创建客户端
1import socket 2 3 4def client_socket(): 5 # 定义客户端 6 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 7 # 设置服务端和ip 8 client.connect(('localhost', 8888)) 9 # 设置发送到服务端数据 10 msg = '我是客户端' 11 client.send(msg.encode(encoding='utf-8')) 12 # 接收服务端数据 13 recv_data = client.recv(1024) 14 print('收到服务端数据:', recv_data.decode(), '\n') 15 16 client.close() 17 18 19if __name__ == '__main__': 20 # 运行客户端 21 client_socket()
1.2创建服务端:
1import socket 2 3 4def server_socket(): 5 # 创建服务端 6 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 7 # 绑定客户端ip和端口 8 server.bind(('localhost', 8888)) 9 # 设置监听大小 10 server.listen(10) 11 print('服务器开始监听') 12 # 阻塞至客户端 取得消息 13 conn, ip_port = server.accept() 14 # 设置消息大小 15 recv_data = conn.recv(1024) 16 print(f'收到客户端{ip_port}', recv_data.decode(), '\n') 17 # 发送到客户端消息 18 msg = '我是服务端' 19 conn.send(msg.encode()) 20 # 关闭资源 21 conn.close() 22 23 24if __name__ == '__main__': 25 # 运行服务端 26 server_socket() 27
1.3运行测试:
首先运行服务端:

再运行客户端,接收到已经运行的服务端数据:

最后查看服务端数据:

2.multiprocessing
Python可以用multiprocessing实现多进程
1import multiprocessing 2import time 3 4 5def process_1(): 6 for i in range(5): 7 print(f'进程1运行:{i}次;') 8 time.sleep(0.1) # 模拟进程运行时间 9 10 11def process_2(name): 12 for i in range(5): 13 print(f'{name}进程2运行:{i}次;') 14 time.sleep(0.1) # 模拟进程运行时间 15 16 17def process_3(): 18 for i in range(5): 19 print(f'进程3运行:{i}次;') 20 time.sleep(0.1) # 模拟进程运行时间 21 22 23if __name__ == '__main__': 24 # 开启守护进程 25 p1 = multiprocessing.Process(target=process_1, daemon=True) 26 # 传参 27 p2 = multiprocessing.Process(target=process_2, args=('小明',)) 28 # 不开启守护进程 29 p3 = multiprocessing.Process(target=process_3) 30 31 p1.start() 32 p2.start() 33 p3.start() 34 35 time.sleep(0.3) 36 print('主进程结束!进程1一起结束。') 37
注意:
1.target=函数名,而不是target=函数名();
2.在子进程创建进程可能会导致无限创建进程,要在main进程中创建进程。
测试结果:

3.threading
Python可以用threading实现多线程
1import threading 2import time 3 4 5def thread_1(): 6 for i in range(5): 7 print(f'线程1运行:{i}次;') 8 time.sleep(0.1) # 模拟线程运行时间 9 10 11def thread_2(name): 12 for i in range(5): 13 print(f'{name}线程2运行:{i}次;') 14 time.sleep(0.1) # 模拟线程运行时间 15 16 17def thread_3(): 18 for i in range(5): 19 print(f'线程3运行:{i}次;') 20 time.sleep(0.1) # 模拟线程运行时间 21 22 23if __name__ == '__main__': 24 # 开启守护线程 25 p1 = threading.Thread(target=thread_1, daemon=True) 26 # 传参 27 p2 = threading.Thread(target=thread_2, args=('小明',)) 28 # 不开启守护线程 29 p3 = threading.Thread(target=thread_3) 30 31 p1.start() 32 p2.start() 33 p3.start() 34 35 time.sleep(0.3) 36 print('主线程结束!线程1一起结束。')
测试结果:

进程和线程的区别:
进程:
- 进程占用内存相对多
- 进程里默认有一个线程
- 进程间数据不共享
- 进程可以使用多个cpu运行
线程:
- 线程占用资源相对少
- 一个线程必须依赖一个进程运行
- 线程间的全局变量共享
- 线程只能用一个cpu来回切换运行