在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中的字典详细介绍
Sep 18 Python
Python lambda和Python def区别分析
Nov 30 Python
介绍Python中的__future__模块
Apr 27 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
带你了解python装饰器
Jun 15 Python
Python实现感知机(PLA)算法
Dec 20 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
Python错误的处理方法
Jun 23 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 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微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
Python中的Classes和Metaclasses详解
2015/04/02 Python
Python 的内置字符串方法小结
2016/03/15 Python
pandas中去除指定字符的实例
2018/05/18 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
高考考python编程是真的吗
2020/07/20 Python
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
Solaris操作系统的线程机制
2012/12/23 面试题
公务员诚信承诺书
2014/05/26 职场文书
运动会演讲稿300字
2014/08/25 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
买卖合同协议书范本
2014/10/18 职场文书
mysql全面解析json/数组
2022/07/07 MySQL
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技