在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中输出带颜色的文字的方法
Jun 19 Python
python任务调度实例分析
May 19 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
Tornado高并发处理方法实例代码
Jan 15 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
基于pip install django失败时的解决方法
Jun 12 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
python+pyqt5实现24点小游戏
Jan 24 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
Python函数中apply、map、applymap的区别
Nov 27 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中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Python中字典的setdefault()方法教程
2017/02/07 Python
Android分包MultiDex策略详解
2017/10/30 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
django admin组件使用方法详解
2019/07/19 Python
python虚拟环境完美部署教程
2019/08/06 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
pygame实现成语填空游戏
2019/10/29 Python
python 求定积分和不定积分示例
2019/11/20 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
程序员跳槽必看面试题总结
2013/06/28 面试题
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
单位介绍信范文
2014/01/18 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
党校学习个人总结
2015/02/15 职场文书