1. 进程池(Process Pool)
进程池是通过将多个进程放入池中管理来避免频繁地创建和销毁进程,提高效率。Python 提供了 multiprocessing.Pool
类来实现进程池,它可以用于并行计算任务。
示例:使用进程池
from multiprocessing import Pooldef square(x):return x * xif __name__ == "__main__":with Pool(4) as pool: # 创建一个包含 4 个进程的进程池results = pool.map(square, [1, 2, 3, 4, 5])print(results) # 输出 [1, 4, 9, 16, 25]
2. 进程间通信(IPC)
进程间通信是指不同进程之间交换数据或信号。Python 中的 multiprocessing
模块提供了 Queue
、Pipe
等方式来实现进程间的通信。
示例:使用 Queue
进行进程间通信
from multiprocessing import Process, Queuedef put_data(q):q.put("Hello from Process!")def get_data(q):print(q.get())if __name__ == "__main__":q = Queue()p1 = Process(target=put_data, args=(q,))p2 = Process(target=get_data, args=(q,))p1.start()p2.start()p1.join()p2.join()
3. 多线程(Multithreading)
Python 中的多线程通过 threading
模块来实现。多线程适合 I/O 密集型任务(如网络请求、文件操作等),因为 Python 的全局解释器锁(GIL)会限制线程并行执行 CPU 密集型任务。
示例:使用多线程
import threadingdef print_numbers():for i in range(5):print(i)def print_letters():for letter in "ABCDE":print(letter)if __name__ == "__main__":t1 = threading.Thread(target=print_numbers)t2 = threading.Thread(target=print_letters)t1.start()t2.start()t1.join()t2.join()
4. 进程与线程的区别
- 进程:每个进程都有独立的内存空间和资源,适合 CPU 密集型任务。进程间的数据共享复杂,需要通过进程间通信来实现。
- 线程:线程是进程中的一个执行单元,多个线程共享进程的内存空间。线程更适合 I/O 密集型任务。由于全局解释器锁(GIL),Python 线程不能在同一时刻并行执行 CPU 密集型任务。
5. 网络通信
网络通信包括客户端和服务器之间的数据交换。Python 提供了 socket
模块来支持低级别的网络通信。网络通信使用端口和 IP 地址来进行定位和数据传输。
关键概念:
- IP 地址:每台连接到网络的设备都有一个唯一的 IP 地址。
- 端口:用于区分同一主机上不同服务的编号。
- 协议:数据传输遵循的规则,常见的有 TCP、UDP、HTTP 等。
6. Socket 编程
socket
是 Python 中进行网络编程的基础库,支持 TCP 和 UDP 协议。通过 socket
,我们可以创建客户端和服务器。
示例:TCP Socket 服务器和客户端
- TCP 服务器:
import socketdef tcp_server():server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind(('localhost', 8080)) # 绑定 IP 和端口server_socket.listen(5) # 监听连接print("Server started, waiting for connection...")client_socket, addr = server_socket.accept()print(f"Connection from {addr}")data = client_socket.recv(1024) # 接收数据print(f"Received: {data.decode('utf-8')}")client_socket.send(b'Hello from server') # 发送数据client_socket.close()if __name__ == "__main__":tcp_server()
- TCP 客户端:
import socketdef tcp_client():client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect(('localhost', 8080)) # 连接服务器client_socket.send(b'Hello, server') # 发送数据data = client_socket.recv(1024) # 接收数据print(f"Received: {data.decode('utf-8')}")client_socket.close()if __name__ == "__main__":tcp_client()
7. UDP 编程
UDP 是无连接的协议,不保证数据的可靠传输,适用于对实时性要求高的应用,如视频流、在线游戏等。
示例:UDP 服务器和客户端
- UDP 服务器:
import socketdef udp_server():server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server_socket.bind(('localhost', 8080)) # 绑定 IP 和端口while True:data, addr = server_socket.recvfrom(1024) # 接收数据print(f"Received message: {data.decode('utf-8')} from {addr}")server_socket.sendto(b'Hello from UDP server', addr) # 发送数据if __name__ == "__main__":udp_server()
- UDP 客户端:
import socketdef udp_client():client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)client_socket.sendto(b'Hello, UDP server', ('localhost', 8080)) # 发送数据data, addr = client_socket.recvfrom(1024) # 接收数据print(f"Received from server: {data.decode('utf-8')}")client_socket.close()if __name__ == "__main__":udp_client()
8. HTTP 编程
HTTP 协议是客户端与服务器通信的标准协议。Python 提供了 http.server
和 requests
等库来实现 HTTP 服务器和客户端功能。
- HTTP 服务器:
from http.server import SimpleHTTPRequestHandler, HTTPServerdef run_http_server():server = HTTPServer(('localhost', 8080), SimpleHTTPRequestHandler)print("HTTP server started on port 8080")server.serve_forever()if __name__ == "__main__":run_http_server()
- HTTP 客户端:
import requestsdef http_client():response = requests.get('http://localhost:8080')print(f"Response: {response.text}")if __name__ == "__main__":http_client()
总结
- 进程池:
multiprocessing.Pool
用于管理和复用多个进程,适合并行计算。 - 进程间通信:通过
Queue
或Pipe
进行数据交换。 - 多线程:通过
threading
模块实现多线程编程,适用于 I/O 密集型任务。 - 进程与线程区别:进程有独立的内存空间,线程共享内存,进程适合 CPU 密集型任务,线程适合 I/O 密集型任务。
- 网络通信:通过
socket
实现客户端和服务器通信,支持 TCP、UDP、HTTP 协议。 - TCP:面向连接的协议,保证数据传输的可靠性。
- UDP:无连接协议,适用于实时性要求高的应用。
- HTTP:标准的网络通信协议,广泛应用于 Web 开发中。