在python里创建一个任务(Task)实例


Posted in Python onApril 25, 2020

与事件循环进行交互,最基本的方式就是任务,任务封装了协程和自动跟踪它的状态。任务是Future类的子类,所以其它协程可以等待任务完成,或当这些任务完成获取返回结果。

在这里通过create_task()函数来创建一个任务实例,然后事件循环就运行这个任务,直到这个任务返回为止:

import asyncio
 
async def task_func():
  print('in task_func')
  return 'the result'
 
async def main(loop):
  print('creating task')
  task = loop.create_task(task_func())
  print('waiting for {!r}'.format(task))
  return_value = await task
  print('task completed {!r}'.format(task))
  print('return value: {!r}'.format(return_value))
 
event_loop = asyncio.get_event_loop()
try:
  event_loop.run_until_complete(main(event_loop))
finally:
  event_loop.close()

结果输出如下:

creating task
waiting for <Task pending coro=<task_func() running at D:\work\csdn\python_Game1\example\asyncio_create_task.py:4>>
in task_func
task completed <Task finished coro=<task_func() done, defined at D:\work\csdn\python_Game1\example\asyncio_create_task.py:4> result='the result'>
return value: 'the result'

补充知识:python里创建任务执行一半时取消任务执行

下例子来演示创建任务执行一半时取消任务执行,这时会抛出异常CancelledError,同时也提供了一个机会来删除占用资源等等:

import asyncio
 
async def task_func():
  print('in task_func, sleeping')
  try:
    await asyncio.sleep(1)
  except asyncio.CancelledError:
    print('task_func was canceled')
    raise
  return 'the result'
 
def task_canceller(t):
  print('in task_canceller')
  t.cancel()
  print('canceled the task')
 
async def main(loop):
  print('creating task')
  task = loop.create_task(task_func())
  loop.call_soon(task_canceller, task)
  try:
    await task
  except asyncio.CancelledError:
    print('main() also sees task as canceled')
 
event_loop = asyncio.get_event_loop()
try:
  event_loop.run_until_complete(main(event_loop))
finally:
  event_loop.close()

结果输出如下:

creating task
in task_func, sleeping
in task_canceller
canceled the task
task_func was canceled
main() also sees task as canceled

以上这篇在python里创建一个任务(Task)实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现在Linux系统下更改当前进程运行用户
Feb 04 Python
Python实现模拟登录及表单提交的方法
Jul 25 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
python实现xlsx文件分析详解
Jan 02 Python
Python列表生成式与生成器操作示例
Aug 01 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
python 获取等间隔的数组实例
Jul 04 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
为什么python比较流行
Jun 19 Python
Python代码注释规范代码实例解析
Aug 14 Python
详解python 支持向量机(SVM)算法
Sep 18 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 Python
python 实现任务管理清单案例
Apr 25 #Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 #Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 #Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 #Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 #Python
解决python父线程关闭后子线程不关闭问题
Apr 25 #Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 #Python
You might like
php中文字符串截取方法实例总结
2014/09/30 PHP
PHP生成plist数据的方法
2015/06/16 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
Python操作Excel之xlsx文件
2017/03/24 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
python 重命名轴索引的方法
2018/11/10 Python
python 自定义装饰器实例详解
2019/07/20 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
通过代码实例了解Python异常本质
2020/09/16 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
介绍一下Linux中的链接
2016/06/05 面试题
举例说明类变量和实例变量的区别
2016/06/30 面试题
检讨书怎么写
2015/01/23 职场文书
python 提取html文本的方法
2021/05/20 Python
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers