在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解析XML的几种常见方法的介绍
Apr 09 Python
简单易懂的python环境安装教程
Jul 13 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
Nov 14 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 Python
Pycharm安装并配置jupyter notebook的实现
May 18 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
零基础学Python之前需要学c语言吗
Jul 21 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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
php实现对象克隆的方法
2015/06/20 PHP
PHP 类与构造函数解析
2017/02/06 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
js兼容标准的表格变色效果
2008/06/28 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
微信小程序select下拉框实现效果
2019/05/15 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
python的socket编程入门
2018/01/29 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
深入理解Django-Signals信号量
2019/02/19 Python
eclipse创建python项目步骤详解
2019/05/10 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
安全资料员岗位职责
2013/12/14 职场文书
大学生毕业鉴定
2014/01/31 职场文书
户外宣传策划方案
2014/05/25 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
React配置子路由的实现
2021/06/03 Javascript