在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语言的优雅之处
Jul 04 Python
Django自定义用户认证示例详解
Mar 14 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
Python中的heapq模块源码详析
Jan 08 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
利用Python实现手机短信监控通知的方法
Jul 22 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
Python使用pdb调试代码的技巧
May 03 Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 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学习之PHP变量
2006/10/09 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
Vue运用transition实现过渡动画
2019/05/06 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
python基于TCP实现的文件下载器功能案例
2019/12/10 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
利用指针变量实现队列的入队操作
2012/04/07 面试题
结婚喜宴家长答谢词
2014/01/15 职场文书
员工晚婚的请假条
2014/02/08 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
超市创意活动方案
2014/08/15 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
Python 如何实现文件自动去重
2021/06/02 Python