在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中的序列化存储的方法
Apr 28 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
python正则表达式之作业计算器
Mar 18 Python
python处理xml文件的方法小结
May 02 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
pandas的object对象转时间对象的方法
Apr 11 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
django 实现简单的插入视频
Apr 07 Python
基于python检查矩阵计算结果
May 21 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 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
header()函数使用说明
2006/11/23 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
Symfony的安装和配置方法
2016/03/17 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
javascript 一些用法小结
2009/09/11 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
小程序自定义日历效果
2018/12/29 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
文言文形式的学生求职信
2013/12/03 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
工地资料员岗位职责
2013/12/31 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
2014年民政工作总结
2014/11/26 职场文书
经理岗位职责范本
2015/04/15 职场文书
学术会议领导致辞
2015/07/29 职场文书
python状态机transitions库详解
2021/06/02 Python
Ajax实现异步加载数据
2021/11/17 Javascript