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

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协程之异步同步的区别详解相关推荐

  1. python协程和线程_线程和协程之间的区别

    线程和协程之间的区别很大,甚至大过进程和线程之间的区别.线程建立在进程之上,协程建立在线程之上.那么协程是什么呢? 协程是一段计算机程序,它一般是一个协作类型的子程序,执行时允许暂停和恢复.协程非常适 ...

  2. python协程是什么_在python中线程和协程的区别是什么

    在python中线程和协程的区别:1.一个线程可以拥有多个协程,这样在python中就能使用多核CPU:2.线程是同步机制,而协程是异步:3. 协程能保留上一次调用时的状态,每次过程重入时,就相当于进 ...

  3. python协程池操作mysql_在python中使用aiomysql异步操作mysql

    之前一直在使用mongo与redis,最近在项目中开始使用mysql数据库,由于现在的项目是全程异步的操作,所以在在网上查了下关于在python中异步的操作mysql,找来找去最后发现aiomysql ...

  4. python多线程多进程多协程_python 多进程、多线程、协程

    1.python的多线程 多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有 ...

  5. python 协程可以嵌套协程吗_Python线程、协程探究(2)——揭开协程的神秘面纱...

    一.上集回顾 在上一篇中我们主要研究了python的多线程困境,发现多核情况下由于GIL的存在,python的多线程程序无法发挥多线程该有的并行威力.在文章的结尾,我们提出如下需求: 既然python ...

  6. 【并发编程二十】协程(coroutine)_协程库

    [并发编程二十]协程(coroutine) 一.线程的缺点 二.协程 三.优点 四.个人理解 五.协程库 1.window系统 2.unix系统(包括linux的各个版本) 2.1.makeconte ...

  7. 协程简史,一文讲清楚协程的起源、发展和实现

    /   今日科技快讯   / 北京时间10月5日下午,在瑞典首都斯德哥尔摩,瑞典皇家科学院宣布,将2022年诺贝尔化学奖授予美国化学家卡罗琳·贝尔托西.丹麦化学家摩顿·梅尔达尔和美国化学家卡尔·巴里· ...

  8. linux的进程/线程/协程系列1:进程到协程的演化

    linux的进程/线程/协程系列1:进程到协程的演化 前言 摘要: 1. 一些历史:批处理时代 2. 现代操作系统启动过程 3. 进程(process)的出现 4. 线程(thread)与线程池 5. ...

  9. php7协程通信使用,PHP7下的协程实现

    原标题:PHP7下的协程实现 什么是协程 先搞清楚,什么是协程. 你可能已经听过『进程』和『线程』这两个概念. 进程就是二进制可执行文件在计算机内存里的一个运行实例,就好比你的.exe文件是个类,进程 ...

最新文章

  1. 在线抓图WebSnap Beta 1.2 更新
  2. 耗时三小时整理的机器视觉知识-建议收藏转发
  3. Vue.js-Day02-PM【组件化开发(全局注册组件、局部注册组件、案例)、组件的配置选项、轮播图实例(左右切换按钮、底部导航栏、定时器、鼠标移入-图片静止)】
  4. 熔断器熔断时间标准_一种熔断器熔断时间测试电路的制作方法
  5. 融资2.5亿的国产浏览器,被曝只是打包chrome
  6. Struts2 第9part 通过实现ModelDriven来接收参数
  7. B4.Java web部分
  8. ffmpeg获取h264视频数据
  9. 数据科学 IPython 笔记本 8.7 密度和等高线图
  10. python能做什么-python能用来做什么?这3大主要用途你一定要知道!(实用)
  11. MATLAB在声学理论基础中的应用,MATLAB在声学理论基础中的应用
  12. python投影Himawari-8数据
  13. encode()和decode()编码与解码的解析、常用编码与为何要encode和decode
  14. cmd是计算机语言吗,cmd的含义和作用
  15. 八行代码一键照片转漫画
  16. Python之模块pandas基础知识
  17. bitcoin core全节点钱包同步太慢的解决方法及钱包数据文件移动的方法
  18. Tasteless challenges medium WP
  19. Power BI中的ArcGIS地图
  20. 嵌入式arm学习总结(一)--电子基础知识

热门文章

  1. 若个人计算机主板上的内存条松动,电脑内存条松动后故障现象及解决方法
  2. C9---include,编译
  3. [device]/proc/devices and /dev/
  4. Use pgpool and pgbouncer limit global concurrent SQL Execution
  5. vs2013 类名颜色显示黑色,无法修改
  6. Apache CXF实战之六 创建安全的Web Service
  7. 安装Open Live Writer,添加SyntaxHighlighter实现代码高亮
  8. 用Electron开发企业网盘(二)--分片下载
  9. fMRI在认知心理学上的研究
  10. DirectX10一矩阵代数(二)