Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python并发编程:什么是并发编程?python对并发编程有哪些支持?

python并发编程:什么是并发编程?python对并发编程有哪些支持?

作者头像
科技新语
发布于 2025-01-02 08:24:27
发布于 2025-01-02 08:24:27
1350
举报

为什么要引入并发编程

假设以下两个场景:

场景一:

一个网络爬虫,按顺序爬取花了一个小时,采用并发下载减少到20分钟

场景二:

一个APP应用,优化前每次打开页面需要花费3秒,采用异步并发提升到每次200毫秒

python中的并发编程

  • 第一列为单线程串行,即CPU和IO是串起来执行的。IO的速度会严重制约CPU的运算速度
  • 第二列为多线程并发,即当前线程遇到IO,释放CPU,可以提高CPU的运行效率
  • 第三列为多进程并行,即使用的是多个CPU,然后进行计算
  • 第四列为多机器并行,即使的的是多个机器同时计算同一个任务。

Python 对并发编程的支持

Python 有多种方法来支持并发编程,包括多线程多进程异步I/O协程等。

多线程

Python 的threading 模块提供了多线程编程的支持,它允许创建并发执行的线程,从而实现程序的并发性。

多进程

Python 的 multiprocessing模块提供了多进程编程的支持,它允许创建多个进程来同时执行不同的任务,从而实现程序的并发性。

异步 I/O

Python 3.4 引入了asyncio模块,它提供了异步 I/O 编程的支持,使得程序可以在等待 I/O 操作时进行其他任务的处理,从而提高程序的并发性能。

协程

Python的greenlet模块和gevent模块提供了协程编程的支持,它们允许在同一个线程中运行多个协程,从而实现程序的并发性。

这些并发编程方法在不同的场景下有各自的优缺点,开发者需要根据具体的需求和情况来选择合适的方法。

线程通信方式

线程通信的主要方式有共享变量、消息传递和同步机制。

  • 共享变量:多个线程共享同一份数据,需要考虑数据的访问和修改问题,如线程安全等。
  • 消息传递:多个线程通过传递消息进行通信,常用的实现方式是消息队列
  • 同步机制:多个线程之间需要协调和同步,以避免出现数据不一致或者死锁等问题。常见的同步机制有锁、条件变量、信号量等。

Python 提供了多种并发编程的方式,如多线程、多进程、协程等。在多线程编程中,Python 的 threading 模块提供了对线程的支持,并且还提供了一些同步机制,如 Lock、RLock、Semaphore、Condition 等。

  • 使用Lock对资源加锁,防止冲突访问
  • 使用Queue实现不同线程/进程之间的数据通信,实现生产者-消费者模式
  • 使用线程池Pool/进程池Pool,简化线程/进程的任务提交、等待结束、获取结果
  • 使用subprocess启动外部程序的进程,并进行输入输出交互

总结

Python是一门广泛应用于多种领域的高级编程语言,其内置了丰富的库和工具,支持多种编程范式,包括并发编程。Python提供了多种并发编程的方法,包括线程、进程、协程等。Python的并发编程支持使其在处理大规模数据和高并发访问时具有良好的性能和可扩展性,使得Python成为了许多领域中首选的编程语言之一。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Activiti工作流的详细介绍[通俗易懂]
1、工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现。
全栈程序员站长
2022/11/08
4.1K0
Activiti工作流的详细介绍[通俗易懂]
工作流引擎之activiti入门
在解释activiti之前我们看一下什么是工作流。 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。 我的理解是,工作流将一套大的业务逻辑分解成业务逻辑段, 并统一控制这些业务逻辑段的执行条件,执行顺序以及相互通信。 实现业务逻辑的分解和解耦。 Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。 BPMN即业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)。
lyb-geek
2018/07/26
9.4K0
工作流引擎之activiti入门
Activiti工作流框架学习笔记(一)「建议收藏」
对于第一次接触工作流的小伙伴来说,觉得难以理解,也无可厚非,说得好像我自己就能深刻理解一样,我也只是将学习Activiti工作流框架中的一些知识点记录下来而已,也希望能和大家讨论。
全栈程序员站长
2022/11/08
2.7K0
Activiti工作流框架学习笔记(一)「建议收藏」
day57_BOS项目_09
方式一:   第一步:获得activiti-eclipse-plugin.zip文件   第二步:将zip文件解压到eclipse的dropins目录中
黑泽君
2018/10/18
4270
day57_BOS项目_09
Activiti5工作流笔记一
  网上工作流的定义一大堆,这里就不去复制了,通俗的理解,工作流就是类似OA系统中请假审批、报销审批等一系列流程,下级提交的申请只有直系领导才能审批,其他人是没有权限的,而只有直系领导审批通过后,直系领导的直系领导才可以看到申请,并进行审批,以此类推。。。
HUC思梦
2020/09/03
8080
Activiti5工作流笔记一
java中jbpm工作流_安卓框架
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
7740
java中jbpm工作流_安卓框架
day58_BOS项目_10
之前的请假流程,是没有实际意义的,我们要使得我们流程变得有意义(有实际意义),需要在流程向下推进的过程中带着数据推进才有意义。如下图所示:
黑泽君
2018/10/25
7330
day58_BOS项目_10
Activiti7笔记(二)Activiti7一共涉及到25张表,哪些操作会涉及哪些表,每张表的作用是什么
第二部分是表示表的用途的两个字母标识。 用途也和服务的 API 对应。 ACT_RE :'RE’表示 repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。 ACT_RU:'RU’表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti 只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。 ACT_HI:'HI’表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。 ACT_GE : GE 表示 general。 通用数据, 用于不同场景下
一写代码就开心
2022/05/09
3K0
Activiti7笔记(二)Activiti7一共涉及到25张表,哪些操作会涉及哪些表,每张表的作用是什么
activiti6.0工作流引擎深度解析_自定义工作流引擎
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。
全栈程序员站长
2022/09/27
3K0
activiti6.0工作流引擎深度解析_自定义工作流引擎
【白银人机】Activiti 工作流:完整 hello world 大比拼(API 结合实例讲解)
本来想着闲来无事,前面在项目中刚刚用到了工作流 Activiti 框架,写写博客的,但是,事情总是纷纷杂杂,一直拖延到现在,这一节原本想要写一下关于 Activiti 的 API ,但是,想着太多这样的博客了,而且显得太生硬,难以理解,所以,这些 API 就在实际的 demo 中来讲解。
好好学java
2019/06/14
8110
第十节:Activiti6.0——四种Job工作的产生与管理
一、概述 介绍: 流程在执行过程中会产生不同的任务。 ServiceTask异步任务会产生异步任务,存放在一般工作表act_ru_job中。 定时任务会产生定时的任务,在定时时间未到达之前会存放在定时工作表act_ru_timer_job中。 挂起任务,比如将未到时间的定时任务手动暂停,则会存放在挂起任务表act_ru_suspended_job中。 不可执行任务,如果任务执行失败,并且在重试次数用完的情况下也没有成功执行,则任务会存放到不可执行任务表act_ru_deadletter_job中。 二、异步
凡人飞
2020/09/21
3.4K0
第十节:Activiti6.0——四种Job工作的产生与管理
万字详解:Activiti 工作流引擎
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/07/26
1K0
万字详解:Activiti 工作流引擎
Activiti最全入门教程「建议收藏」
1) 假设:这两张图就是华谊兄弟的请假流程图 2) 图的组成部分: A. 人物:范冰冰 冯小刚 王中军 B. 事件(动作):请假、批准、不批准
全栈程序员站长
2022/09/13
2.5K0
Activiti最全入门教程「建议收藏」
2021全网最全Activiti7教程03(Activiti7基本操作-欢迎收藏)
  将上面在设计器中定义的流程部署到activiti数据库中,就是我们讲的流程部署。 通过调用Activiti的api将流程定义的bpmn和png两个文件一个一个添加部署到activiti中,还可以将两个文件打车zip包部署。
用户4919348
2021/06/17
8740
2021全网最全Activiti7教程03(Activiti7基本操作-欢迎收藏)
activity工作流引擎
1、工作流是什么? 简单来说工作流就是将一条信息根据角色、分工、条件不同进行固定的向上传递,数据是按照固定的流向进行传输,一级一级传递下去,这种场景在OA , CRM / ERP中应用的比较多。通常这种操作自己本身也可以通过逻辑来实现,但是复杂度很高。而且不方便维护。所以通常都采用第三方引擎框架来实现,出了引擎本身简化了操作以外。更重要的是维护起来很方便。
全栈程序员站长
2022/07/01
1.5K0
activity工作流引擎
Activiti学习详解【面试+工作】
一:Activiti第一天 1:工作流的概念 说明: 1) 假设:这两张图就是XX兄弟的请假流程图 2) 图的组成部分: A. 人物:范XX 冯X刚 王X军 B. 事件(动作):请假、批准、不批准
Java帮帮
2018/03/15
3.4K0
Activiti学习详解【面试+工作】
第八节:Activiti6.0——启动流程相关
介绍:在启动流程后,每个流程实例都会有执行流(存储在act_ru_execution表中)。实例都有主执行流,没有父id的执行流是流程实例,其后如果流程中有一个分支则有一个子执行流,分支和子执行流一一对应。对执行流可以设置变量,设置子执行流的变量为本地(临时)变量(自在当前执行流有效),设置主执行流的变量为全局变量。
凡人飞
2020/09/21
7040
第八节:Activiti6.0——启动流程相关
Activiti7工作流引擎-流程定义
流程定义是线下按照 bpmn2.0 标准去描述 业务流程,通常使用 activiti-explorer(web 控制台)或 activiti-eclipse-designer 插件对业务流程进行建模,这两种方式都遵循 bpmn2.0 标准。本教程使用activiti-eclipse-designer 插件完成流程建模。使用 designer 设计器绘制流程,会生成两个文件:.bpmn和.png
cwl_java
2020/01/02
1.8K0
Activiti就是这么简单
Activiti介绍 什么是Activiti? Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。. 我们即将学习的是一个业务流程管理框架, 常见开源工作流引擎框架 : O
Java3y
2018/04/02
2.3K1
Activiti就是这么简单
第五节:Activiti6.0——流程定义相关API
介绍:在发布一次资源后,会生成对应的流程定义(存储在表act_re_procdef)中,该定义记录一个流程的信息,如下图所有:
凡人飞
2020/09/20
1.1K0
推荐阅读
相关推荐
Activiti工作流的详细介绍[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档