Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 332|回复: 0

Python 多进程编程,每个客户端发起多个socket连接

[复制链接]

254

主题

363

帖子

2431

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2431
发表于 2025-3-1 06:07:21 | 显示全部楼层 |阅读模式
导入必要的模块
  1. import socket
  2. from multiprocessing import Process
复制代码

定义一个函数用于创建socket客户端:
  1. def client_process(server_address, port):
  2.     # 创建socket对象
  3.     client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4.     # 连接到服务器
  5.     client_socket.connect((server_address, port))
  6.     # 发送一些数据到服务器
  7.     client_socket.sendall(b"Hello, server!")
  8.     # 接收服务器的响应
  9.     response = client_socket.recv(1024)
  10.     print(f"Received from server: {response.decode()}")
  11.     # 关闭socket连接
  12.     client_socket.close()
复制代码


创建并启动多个进程:
  1. def main():
  2.     # 服务器的地址和端口号
  3.     server_address = 'localhost'
  4.     port = 12345
  5.     # 创建进程列表
  6.     processes = []
  7.     # 创建并启动多个进程
  8.     for i in range(5):  # 例如,创建5个客户端进程
  9.         p = Process(target=client_process, args=(server_address, port))
  10.         p.start()
  11.         processes.append(p)
  12.    
  13.     # 等待所有进程完成
  14.     for p in processes:
  15.         p.join()

  16. if __name__ == '__main__':
  17.     main()
复制代码
确保服务器的IP地址和端口号正确无误,并且服务器已经准备好接受连接。

在多进程环境中使用全局解释器锁(GIL)可能会限制并发性能在某些情况下,尤其是在CPU密集型任务中。但对于I/O密集型任务(如网络通信),Python的多进程通常表现良好。如果你确实遇到了性能瓶颈,可以考虑使用multiprocessing.Pool或异步I/O(例如使用asyncio库)。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-4-16 05:02 , Processed in 0.016647 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表