对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数据类型详解(四)字典:dict
May 12 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
浅谈Python 递归算法指归
Aug 22 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
pytorch实现mnist数据集的图像可视化及保存
Jan 14 Python
Pygame的程序开始示例代码
May 07 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 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
php数组中删除元素的实现代码
2012/06/22 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
javaScript arguments 对象使用介绍
2013/10/18 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
Python找出9个连续的空闲端口
2016/02/01 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
简单的Python人脸识别系统
2020/07/14 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
美的官方商城:Midea
2016/09/14 全球购物
大学生个人学年总结
2015/02/15 职场文书
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python