在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删除nginx缓存文件示例(python文件操作)
Mar 26 Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
python抓取网页中图片并保存到本地
Dec 01 Python
简单谈谈python中的多进程
Nov 06 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
pandas 数据实现行间计算的方法
Jun 08 Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 Python
Python3.4解释器用法简单示例
Mar 22 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
python 如何设置守护进程
Oct 29 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 Python
基于Python实现股票收益率分析
Apr 02 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
做个自己站内搜索引擎
2006/10/09 PHP
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
Javascript的this用法
2017/01/16 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
Python中正则表达式的用法实例汇总
2014/08/18 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
python实现flappy bird小游戏
2018/12/24 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
中科创达面试题
2016/12/28 面试题
销售高级职员求职信
2013/10/29 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
新教师教学工作总结
2015/08/14 职场文书