在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获取文件ssdeep值的方法
Oct 05 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
Mar 13 Python
Python实现的建造者模式示例
Aug 06 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
jupyter notebook读取/导出文件/图片实例
Apr 16 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
Python 微信公众号文章爬取的示例代码
Nov 30 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/02/10 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
用javascript作一个通用向导说明
2011/08/30 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
深入分析原生JavaScript事件
2014/12/29 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
[05:53]完美世界携手游戏风云打造 卡尔工作室观战系统篇
2013/04/22 DOTA
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
如何对python的字典进行排序
2020/06/19 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
印度在线杂货店:bigbasket
2018/08/23 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
2015年个人实习工作总结
2014/12/12 职场文书
逃课检讨书
2015/01/26 职场文书
立案决定书范文
2015/06/24 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
用Python提取PDF表格的方法
2021/04/11 Python