最近在学习python3 的 asyncio, 特将学习笔记记录于此.

先来个简单的例子:

import asyncio

def hello_world(loop):

print('Hello World')

loop.stop()

loop = asyncio.get_event_loop()

# Schedule a call to hello_world()

loop.call_soon(hello_world, loop)

# Blocking call interrupted by loop.stop()

loop.run_forever()

loop.close()

可以看到先是通过

asyncio.get_event_loop()

得到事件循环,而这是 selector_events.BaseSelectorEventLoop 、base_events.BaseEventLoop 的一个实例.。之后调用 call_soon以达到立即执行的目的,这个 call_soon来自base_events.BaseEventLoop ,实际的是抛给了 events.Handle,生成了一个 Handle的实例,实际执行是 Handle._run, 但是在实例 Handle后并没有立即调用_run,而是将生成的 Handle 实例添加到了 base_events.BaseEventLoop. _ready 中,直到调用

loop.run_forever()

才开始执行, 那么这个 loop.run_forever() 做了啥?

def run_forever(self):

"""Run until stop() is called."""

self._check_closed()

if self.is_running():

raise RuntimeError('This event loop is already running')

if events._get_running_loop() is not None:

raise RuntimeError(

'Cannot run the event loop while another loop is running')

self._set_coroutine_wrapper(self._debug)

self._thread_id = threading.get_ident()

if self._asyncgens is not None:

old_agen_hooks = sys.get_asyncgen_hooks()

sys.set_asyncgen_hooks(firstiter=self._asyncgen_firstiter_hook,

finalizer=self._asyncgen_finalizer_hook)

try:

events._set_running_loop(self)

while True:

self._run_once()

if self._stopping:

break

finally:

self._stopping = False

self._thread_id = None

events._set_running_loop(None)

self._set_coroutine_wrapper(False)

if self._asyncgens is not None:

sys.set_asyncgen_hooks(*old_agen_hooks)

loop.run_forever() 先是检查是否有正在运行的事件循环, 保证同一时间只有一个loop运行,之后

try:

events._set_running_loop(self)

while True:

self._run_once()

if self._stopping:

break

可以看到是一直调用_run_once(),由于 _run_once()内容较多这里就不再贴完整的代码, 只摘抄关键的部分.

ntodo = len(self._ready)

for i in range(ntodo):

handle = self._ready.popleft()

if handle._cancelled:

continue

if self._debug:

pass # not care ...

else:

handle._run()

handle = None # Needed to break cycles when an exception occurs.

可以看出, 所有的call_soon遵循FIFO原则,不过这里还是会block的, 比如在前文中的hello_world中加入耗时的操作. 所以一旦想用异步,还是全部使用异步,要么0要么1.

python loop call soon_python3-asyncio 学习笔记 1 -- call_soon相关推荐

  1. Python基础教程-菜鸟教程学习笔记1

    Python基础教程-菜鸟教程学习笔记1 文章目录 Python基础教程-菜鸟教程学习笔记1 前言 Python 简介 1. 第一个Python程序 2. Python 中文编码 3. 基本语法 1) ...

  2. Python预测 数据分析与算法 学习笔记(特征工程、时间序列)

    微信公众号:数学建模与人工智能 GitHub - QInzhengk/Math-Model-and-Machine-Learning 第3章 探索规律 3.1 相关分析 相关关系是一种与函数关系相区别 ...

  3. Python可视化物理随机过程---pygame学习笔记2

    Python可视化物理随机过程-pygame学习笔记2 文章目录 Python可视化物理随机过程---pygame学习笔记2 一.扩散现象的简单的介绍 二.代码实现 三.运行代码的效果展示 四.总结 ...

  4. python查看方法作用_python学习笔记1,新手小白也能看得懂

    这是酸菜在风变编程上学习python时积累的学习笔记,希望能帮到同样也在学习中的小伙伴.持续更新~ 第0关 Print()函数 (1)不带引号:让计算机读懂括号里的内容,打印最终的结果 例:print ...

  5. python 面向对象(类)--学习笔记

    面向对象是一种编程方式, 主要集中在类和对象的两个概念 python 中的类符合封装, 继承, 多态的特征 类 是一个模板, 是n多函数的集成 对象 是类的实例化 类的成员分为三大类:字段.方法.属性 ...

  6. python 坐标轴 单位刻度_Python学习笔记(matplotlib篇)--坐标轴刻度

    python学习笔记--坐标轴刻度 所用的库及环境: ide:pycharm python环境:python3.7 matplotlib:   matplotlib 1.11 numpy:  nump ...

  7. python矩阵左除_matlab学习笔记

    Matlab学习笔记 运算: 1.     算术运算(在矩阵意义下进行) +:要求矩阵同型,对应元素相加减,如果用标量和矩阵相加减,不同型就凉凉提示错误,那就将矩阵每个元素和数字相加减 -:同上 *: ...

  8. python的基本数据结构_Python学习笔记——基本数据结构

    列表list List是python的一个内置动态数组对象,它的基本使用方式如下: shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I ...

  9. python的基本数据结构_python学习笔记-基本数据结构

    Python 学习笔记-1 写在最前面,因为组内小伙伴要走,生信团队由原来的7个人,慢慢的变的只有我一个人了,需要紧急突击下python,因为有python的流程要交接维护 python 基本情况 代 ...

最新文章

  1. 用ldap方式访问AD域的的错误解释
  2. ERROR MESSAGE: Invalid command line: Malformed walker argument: Could not find walker with name
  3. 产品管理|产品设计流程[完整版]
  4. linux启动exe出来SQLite问题,CentOS 7下sqlite3的问题修复
  5. future java 多线程_Java多线程之Future与FutureTask
  6. tushare查看a股是否跌到位
  7. 11.13 模10计数器设计
  8. [转载] 【Java】将一个字符串的字符排序,按ASCII表的顺序从小到大
  9. 理论基础 —— 树 —— 树的存储结构
  10. [Contest]2017 ACM/ICPC Asia Regional Shenyang Online(01 03 07 09 10 11待补)
  11. webpack常用知识点
  12. python3 def download_python3下载抖音视频
  13. ios无痕埋点_掌握数据生命周期:初识数据埋点
  14. 多线程之同步synchronized的使用不当造成java.lang.IllegalMonitorStateException 异常
  15. python播放wav音频文件源码
  16. 黑客入侵电脑网络四大步骤全面曝光
  17. 25个最好免费下载电子书(Ebooks)的网站
  18. vs离线安装Qt开发插件vsix
  19. PMP备考之路 - 汪博士第六章(项目进度管理)
  20. 华北电力保定校区学计算机好吗,华北电力大学保定校区计算机专业

热门文章

  1. 数据挖掘的一个完整过程
  2. abb变频器如何就地增加频率_abb变频器报接地故障如何处理,故障原因分析
  3. c++ 取机器码_吉林c系列防倒灌风帽怎么卖,流线型通风器可定制
  4. python怎样入门_python怎么入门啊?
  5. vuecli 实战商城后台管理系统_前台商城系统及后台管理系统
  6. ngTemplateOutlet递归的问题
  7. C#程序中设置全局代理(Global Proxy)
  8. Mysql实现企业级日志管理、备份与恢复
  9. [翻译] FastReport Class Hierarchy (FastReport 组件类层次结构)
  10. sublime text 自动保存