15.Python网络编程:进程池、进程间通信、多线程、进程和线程区别、网络通信、端口、IP地址、socket、UDP、TCP、http

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 模块提供了 QueuePipe 等方式来实现进程间的通信。

示例:使用 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.serverrequests 等库来实现 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 用于管理和复用多个进程,适合并行计算。
  • 进程间通信:通过 QueuePipe 进行数据交换。
  • 多线程:通过 threading 模块实现多线程编程,适用于 I/O 密集型任务。
  • 进程与线程区别:进程有独立的内存空间,线程共享内存,进程适合 CPU 密集型任务,线程适合 I/O 密集型任务。
  • 网络通信:通过 socket 实现客户端和服务器通信,支持 TCP、UDP、HTTP 协议。
  • TCP:面向连接的协议,保证数据传输的可靠性。
  • UDP:无连接协议,适用于实时性要求高的应用。
  • HTTP:标准的网络通信协议,广泛应用于 Web 开发中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 中报错 TypeError: crypto$2.getRandomValues is not a function

问题 在新建的项目中,使用的是 npm init vue 创建项目后,执行命令 npm i ,然后去 npm run dev 这个时候报错 TypeError: crypto$2.getRandomValues is not a function 起初是以为搞错了,然后再删掉 node_modules 和 package-lo…

如何通过挂载debugfs来访问内核调试信息

1. DebugFS 的作用 bugFS 的作用 内核调试接口:允许内核模块或子系统在 DebugFS 中创建虚拟文件或目录,暴露调试信息。 动态交互:用户可以直接读写这些文件来查看或修改内核状态(如调整日志级别、触发特定操作)。 零…

001 SpringCloudAlibaba整合 - Nacos注册配置中心、Sentinel流控、Zipkin链路追踪、Admin监控

SpringCloudAlibaba 文章目录 SpringCloudAlibaba1.版本依赖关系2022.x 分支2021.x 分支2.2.x 分支 组件版本关系 2.基础项目构建1.引入全局pom文件2.创建对应的模块 3.SpringBootAdmin监控服务整合1.cloud-admin服务搭建1.导入服务端依赖2.主启动类添加EnableAdminServer注解启…

常用的网络安全设备

一、 WAF 应用防火墙 范围:应用层防护软件 作用: 通过特征提取和分块检索技术进行模式匹配来达到过滤,分析,校验网络请求包的目的,在保证正常网络应用功能的同时,隔绝或者阻断无效或者非法的攻击请求 可…

Jenkins 新建配置Pipeline任务 三

Jenkins 新建配置Pipeline任务 三 一. 登录 Jenkins 网页输入 http://localhost:8080 输入账号、密码登录 一个没有创建任务的空 Jenkins 二. 创建 任务 图 NewItem 界面左上角 New Item 图NewItemSelect 1.Enter an item name:输入任务名 2.Select an ite…

如何构建有效的人工智能代理

目录 什么是 AI 代理? 何时应使用 AI 代理? 人工智能代理的构建模块 构建 AI 代理的常用方法 1. 提示链接(分步说明) 2.路由(将任务发送到正确的地方) 3.并行处理(同时做多件事) 4. 协调者和工作者 AI(团队合作) 5. 评估器和优化器(修复错误) 如何让人工…

linux 下连接mysql(下)

case 表达式 表t1中的数据如下。 select * from t1; ---------------------------- | id | student_no | name | age | ---------------------------- | 3 | 202501 | ll | 10 | | 4 | 202502 | tt | 15 | ----------------------------如果学号是202501,…

hivemetastore 连接过多导致sql查询慢

MetaStore (DB)修改对应的处理连接数maxConnectionsPerPartition建议设置成 100 (不能超过最大值300),重启Hive服务。 建议值100是根据与工行规模相当集群的设置作参考,尽量大满足连接数请求的同时考虑connection占用资源(如果connection太多会占用太多的…

sqli-labs布尔盲注

通过?id1及?id1判断是否存在sql注入的漏洞 ?id1有回显 ?id1无回显 再使用?id1 and 11 --及?id1 and 12 --判断是否为布尔盲注 ?id1 and 11 --有回显 ?id1 and 12 --无回显 为布尔盲注,使用python获取其中的库名,表名,列名及数据 1…

ovs源码分析

源码版本 ovs 内核部分的代码在linux内核的 /net/openswitch目录下,应用层控制面代码在ovs项目中。 Linux kernel: version 6.2.0 Ovs: v3.4.1 总体架构 整体结构图 ovs的架构如下图所示,主要由内核datapath、vswitchd、ovsdb以及用户空间的ovs-vs…

vue3实战-----使用mock模拟接口数据

vue3实战-----使用mock模拟接口数据 1.安装和配置2.创建mock数据3.使用axios测试 1.安装和配置 安装依赖:https://www.npmjs.com/package/vite-plugin-mock pnpm install -D vite-plugin-mock mockjs在 vite.config.js 配置文件启用插件: import { viteMockServe } from vit…

DeepSeek+Excel 效率翻倍

2025年初,DeepSeek以惊人的效率突破技术壁垒,用极低的成本实现了与行业顶尖AI相媲美的性能,瞬间成为全球科技领域的热门话题。 那么AI工具的普及将如何改变我们的工作方式?Excel会被取代吗? 今天,珠珠带你…

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…

pyside6 中信号有的地方用connect有的用emit为什么

在 PySide6 的 Qt 框架中,connect 和 emit 是信号与槽机制的两个核心操作,但它们的作用完全不同: 1. connect():建立信号与槽的绑定 作用:将某个信号(Signal)与一个槽函数(Slot&…

React历代主要更新

一、React 16之前更新 React Fiber是16版本之后的一种更新机制,使用链表取代了树,是一种fiber数据结构,其有三个指针,分别指向了父节点、子节点、兄弟节点,当中断的时候会记录下当前的节点,然后继续更新&a…

使用 EDOT 监测由 OpenAI 提供支持的 Python、Node.js 和 Java 应用程序

作者:来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪,而无需任何代码更改。 介绍 去年,我们宣布了 OpenTelemetry…

RabbitMQ使用guest登录提示:User can only log in via localhost

guest用户默认是无法使用远程访问的,生产环境建议直接在对应服务器登录使用。 1、通过创建新增用户并赋予权限实现远程登录 添加新用户 rabbitmqctl add_user zjp zjp 设置管理员 rabbitmqctl set_user_tags zjp administrator 设置新用户的权限 rabbitmqctl…

Eclipse JSP/Servlet 深入解析

Eclipse JSP/Servlet 深入解析 引言 随着互联网的快速发展,Java Web开发技术逐渐成为企业级应用开发的主流。在Java Web开发中,JSP(JavaServer Pages)和Servlet是两个核心组件,它们共同构成了Java Web应用程序的基础。本文将深入解析Eclipse平台下的JSP/Servlet技术,帮…

【Uniapp】关于实现下拉刷新的三种方式

在小程序、h5等地方中,常常会用到下拉刷新这个功能,今天来讲解实现这个功能的三种方式:全局下拉刷新,组件局部下拉刷新,嵌套组件下拉刷新。 全局下拉刷新 这个方式简单,性能佳,最推荐&#xf…

Redis过期删除与内存淘汰策略面试题剖析

一、谈谈Redis过期删除策略 参考我的这篇博客“二、过期删除策略&内存淘汰策略”部分 高性能分布式缓存Redis-数据管理与性能提升之道_redis 高性能缓存数据库-CSDN博客 二、谈谈Redis内存淘汰策略 参考我的这篇博客“二、过期删除策略&内存淘汰策略”部分 高性能…