对Python协程之异步同步的区别详解


Posted in Python onFebruary 19, 2019

一下代码通过协程、多线程、多进程的方式,运行代码展示异步与同步的区别。

import gevent
import threading
import multiprocessing
# 这里展示同步和异步的性能区别,可以看到异步直接同时执行并完成,
# 而同步,需要等待第一个完成后再次执行下一个,是有顺序的执行,而异步不需要
import time


def task(pid):
  gevent.sleep(0.5)
  print('Task %s done' % pid)

def task2(pid):
  time.sleep(0.5)
  print('Task %s done'%pid)

def synchronous():
  for i in range(1, 10):
    task(i)

def asynchronous():
  threads = [gevent.spawn(task, i) for i in range(1,10)]
  gevent.joinall(threads)

def thread_chronous():
  t_list = []
  for i in range(1,10):
    t = threading.Thread(target=task2,args=(i,))
    t.start()
    t_list.append(t)
  for j in t_list:
    j.join()

def multi_chronous():
  t_list = []
  for i in range(1, 10):
    t = multiprocessing.Process(target=task2, args=(i,))
    t.start()
    t_list.append(t)
  for j in t_list:
    j.join()

# 同步执行
print('Synchronous:')
synchronous()
# 开启协程异步执行 自动切换函数
print('Asynchronous:')
asynchronous()
# 开启线程异步执行
print('Threading')
thread_chronous()
# 开启进程的异步执行
if __name__ == '__main__':
  print('Multiprocess')
  multi_chronous()

关于异步 同步的一些理解:

同步和异步的区别就在于是否等待IO执行的结果。好比你去麦当劳点餐,你说“来个汉堡”,服务员告诉你,对不起,汉堡要现做,需要等5分钟,于是你站在收银台前面等了5分钟,拿到汉堡再去逛商场,这是同步IO。

你说“来个汉堡”,服务员告诉你,汉堡需要等5分钟,你可以先去逛商场,等做好了,我们再通知你,这样你可以立刻去干别的事情(逛商场),这是异步IO。

老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。

1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻

2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。

3 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大

4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)老张觉得自己聪明了。所谓同步异步,只是对于水壶而言。普通水壶,同步;响水壶,异步。虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。所谓阻塞非阻塞,仅仅对于老张而言。立等的老张,阻塞;看电视的老张,非阻塞。情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

以上这篇对Python协程之异步同步的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python设置检查点简单实现代码
Jul 01 Python
Python标准异常和异常处理详解
Feb 02 Python
详解python3百度指数抓取实例
Dec 12 Python
Python中字典的setdefault()方法教程
Feb 07 Python
Python3实现发送QQ邮件功能(html)
Dec 15 Python
python os.listdir按文件存取时间顺序列出目录的实例
Oct 21 Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
tensorboard显示空白的解决
Feb 15 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
Python通过format函数格式化显示值
Oct 17 Python
Python命令行参数argv和argparse该如何使用
Feb 08 Python
在python里从协程返回一个值的示例
Feb 19 #Python
Python3多线程基础知识点
Feb 19 #Python
Python进阶之全面解读高级特性之切片
Feb 19 #Python
在python里协程使用同步锁Lock的实例
Feb 19 #Python
对python 通过ssh访问数据库的实例详解
Feb 19 #Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 #Python
深入理解Django-Signals信号量
Feb 19 #Python
You might like
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
javascript新手语法小结
2008/06/15 Javascript
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
国家励志奖学金获奖感言
2014/01/09 职场文书
安全月宣传标语
2014/10/07 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
超市采购员岗位职责
2015/04/07 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript