在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用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
Python实现的双色球生成功能示例
Dec 18 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
Python 经典面试题 21 道【不可错过】
Sep 21 Python
selenium获取当前页面的url、源码、title的方法
Jun 12 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
Python上下文管理器全实例详解
Nov 12 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
浅谈pytorch、cuda、python的版本对齐问题
Jan 15 Python
python的pip有什么用
Jun 17 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
python 详解turtle画爱心代码
Feb 15 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安全配置
2006/10/09 PHP
php.ini 中文版
2006/10/28 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
PHP设计模式 注册表模式
2012/02/05 PHP
PHP验证码函数代码(简单实用)
2013/09/29 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python对象转JSON字符串的方法
2016/04/27 Python
200行自定义python异步非阻塞Web框架
2017/03/15 Python
Python实现登录接口的示例代码
2017/07/21 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
Python常用的json标准库
2019/02/19 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
接口的多继承会带来哪些问题
2015/08/17 面试题
商务专员岗位职责
2013/11/23 职场文书
企业行政文员岗位职责
2013/12/03 职场文书
四年大学自我鉴定
2014/02/17 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
中学社团活动总结
2015/05/07 职场文书
红色经典观后感
2015/06/18 职场文书
工伤调解协议书
2016/03/21 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js