小黑继续跟着沛奇老师学携程:携程基础3

news2025/1/17 5:52:53

3.异步编程

3.1事件循环

理解成一个死循环,去检测并执行某些代码

# 伪代码

任务列表 = [任务1,任务2,任务3,...]
while True:
	可执行的任务列表,已完成的任务列表 = 去任务列表中检查所有任务,将'可执行'和'已完成'的任务返回
	for 就绪任务 in 可执行的任务列表:
		执行已就绪的任务	
	for 已完成的任务 in 已完成的任务列表:
		在任务列表中移除 已完成的任务
import asyncio

# 去生成或获取一个事件循环
loop = asyncio.get_event_loop()
# 将任务放入到任务列表
loop.run_until_complete(任务)

3.2快速上手

协程函数,定义函数时候async def 函数名
协程对象,执行 协程函数()得到协程对象。

async def func():
	pass
result = func()

注意:执行协程函数创建协程对象
如果想要运行协程函数内部代码,必须要将协程对象交给事件循环来处理。

import asyncio

async def func():
    print('小黑想你啦!!!')

result = func()
asyncio.run(result)

3.3 await关键字

await + 可等待对象(协程对象、Future、Task对象 -> IO等待)
示例1:

import asyncio

async def func():
    print('找小黑吃疯狂星期四啊!!')
    response = await asyncio.sleep(2)
    print('结束:', response)

asyncio.run(func())

示例2:

import asyncio

async def others():
    print('start')
    await asyncio.sleep(2)
    print('end')
    return '返回值'

async def func():
    print('执行协程函数内部代码')
    # 遇到IO操作挂起当前协程(任务),等IO操作完成之后再继续往下执行。当前协程挂起时,事件循环可以去执行其他协程(任务)
    response = await others()

    print('IO请求结束,结果为:', response)

asyncio.run(func())

示例3

import asyncio

async def others():
    print('start')
    await asyncio.sleep(2)
    print('end')
    return '返回值'

async def func():
    print('执行协程函数内部代码')
    # 遇到IO操作挂起当前协程(任务),等IO操作完成之后再继续往下执行。当前协程挂起时,事件循环可以去执行其他协程(任务)
    response1 = await others()
    print('IO请求结束,结果为:', response1)
    response2 = await others()
    print('IO请求结束,结果为:', response2)

asyncio.run(func())

await就是等待对象的值得到结果之后再往下走。

3.4 Task对象

在事件循环中添加多个任务。
示例1:

import asyncio

async def func():
    print(1)
    await asyncio.sleep(2)
    print(2)
    return '返回值'

async def main():
    print('main开始')
    # 创建Task对象,将当前执行func函数任务添加到任务循环中
    task1 = asyncio.create_task(func())
    # 创建Task对象,将当前执行func函数任务添加到任务循环中
    task2 = asyncio.create_task(func())
    print('main结束')
    # 当执行某协程遇到IO操作时,回自动化切换执行其他任务
    # 此处的await是等待相对应的协程全部执行完毕并获取结果
    ret1 = await task1
    ret2 = await task2
    print(task1, task2)

if __name__ == '__main__':
    asyncio.run(main())

示例2:

import asyncio

async def func():
    print(1)
    await asyncio.sleep(2)
    print(2)
    return '返回值'

async def main():
    print('main开始')
    task_list = [
        asyncio.create_task(func(), name='n1'),
        asyncio.create_task(func(), name='n2')
    ]
    print('main结束')
    done, pending = await asyncio.wait(task_list, timeout=2)
    print(done, pending)
asyncio.run(main())

示例3:

import asyncio

async def func():
    print(1)
    await asyncio.sleep(2)
    print(2)
    return '返回值'

task_list = [
    func(),
    func()
]
done, pending = asyncio.run(asyncio.wait(task_list))
print(done

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装、启动和登陆doccano

一、安装 1、使用的Pycharm安装的doccano 2、初始化数据库 doccano init 3、创建用户名和密码 # admin是用户名,pass是密码,都可以自定义 doccano createuser --username admin --password pass 二、启动 1、在一个Terminal终端启动webserver服务 …

自适应控制专栏目录及介绍

目录 自适应控制专栏目录及介绍第一篇:[具有不确定参数系统的自适应跟踪控制设计_ADi_hhh的博客-CSDN博客](https://blog.csdn.net/qq_45830323/article/details/129713051)第二篇:[(SISO)单输入单输出系统的模型参考自适应控制_A…

cdh Hue集成sentry的权限管理详细步骤

hue登录hue的第一个用户要用hue用户创建,默认hue为超级用户,hue用户页面的权限可以管理很多用户操作,比如查看hdfs目录,使用其他组件,授权功能等等 一.hive的配置 1.关闭模拟,开启sentry 2.添加配置(注意配置的位置) <property> <name>sentry.hive.tes…

【C++11】lambda表达式

目录 lambda表达式 1.1 lambda表达式出现的原因 1.2 lambda表达式语法 1.3 函数对象与lambda表达式 lambda表达式 1.1 lambda表达式出现的原因 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用 std::sort 方法 测试代码 #include <…

苹果撤离中国市场?中国市场太重要,印度制造是备胎

苹果在中国之行后&#xff0c;却计划进一步扩大印度制造iPhone的比例&#xff0c;甚至将iPhone15全数交给印度制造&#xff0c;业界因此认为苹果正在离开中国市场&#xff0c;然而这完全是臆想&#xff0c;中国市场对苹果来说仍然非常重要&#xff0c;它不会轻易舍弃这个市场。…

【Unity VR开发】结合VRTK4.0:添加碰撞忽略器

语录&#xff1a; 最远的旅行&#xff0c;是从自己的身体到自己的心&#xff0c;是从一个人的心到另一个人的心。坚强不是面对悲伤不流一滴泪&#xff0c;而是擦干眼泪后微笑面对以后的生活。 前言&#xff1a; 模块化提供了一种允许两个或者多个对象忽略彼此碰撞的方法&#x…

Logstash:多管道配置

我们大多数人已经熟悉 Elastic 产品。 在此博客中&#xff0c;我们将逐步介绍配置 Logstash 以使用多个管道摄取和处理数据的步骤。 Logstash 是一种开源数据处理管道&#xff0c;可让你摄取、转换和输出数据。 它是从各种来源收集和处理大量数据的强大工具&#xff0c;可用于管…

IP协议头

IP 4位版本号&#xff08;version&#xff09;4位头部长度&#xff08;header length&#xff09;8位服务类型&#xff08;Type Of Service&#xff09;16位总长度&#xff08;total length&#xff09;16位标识&#xff08;id&#xff09;3位标志字段13位分片偏移&#xff08;…

Spring的循环依赖

什么是循环依赖&#xff1f; 循环依赖其实就是循环引用&#xff0c;也就是两个或者两个以上的 bean 互相持有对方&#xff0c;最终形成闭环。比如 A 依赖于 B&#xff0c;B 依赖于 C&#xff0c;C 又依赖于 A。如下图&#xff1a; 注意&#xff0c;这里不是函数的循环调用&…

金陵科技学院五年一贯制专转本计算机应用基础考试大纲

金陵科技学院五年一贯制专转本计算机应用基础考试大纲 一、参考书目&#xff1a; 《大学计算机信息技术教程》&#xff0c;张福炎&#xff0c;孙志挥&#xff0c;南京大学出版社&#xff0c;《全国计算机等级考试一级教程计算机基础及MS Office应用》&#xff0c;教育部考试中…

书写我的人生回忆录-这应该是给子女和父母最好的礼物

作为一个业余的软件开发爱好者&#xff0c;我又捣鼓了一个有意思的小东西 &#xff0c;使用完全免费哈 您可以是以子女的身份帮助父母来完成这份回忆录&#xff1a; 《书写我的人生回忆录》是一款软件&#xff0c;其中包含70个问题&#xff0c;涵盖了父母的个人喜好、家庭、工…

关于图床使用

安装windows终端 Windows 终端安装 | Microsoft Learn 安装oh-my-posh 安装scoop &#xff08;后续都使用PowerShell 7.2.10&#xff09;&#xff1a; > Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Optional: Needed to run a remote script the first ti…

代谢组学-南京医科大学胡志斌团队绘制心脏发育全周期多组学图谱

文章标题&#xff1a;Multi-omics profifiling visualizes dynamics of cardiac development and functions 发表期刊&#xff1a;Cell Reports 影响因子&#xff1a;9.995 作者单位&#xff1a;南京医科大学 百趣提供服务&#xff1a;发现代谢组学HD-MIX版 百趣代谢组学分…

教你用Python破解WiFi,流量自由不再是梦!(附完整源码)

目录 一、准备工作二、编写代码三、展示测试结果四、生成密码本&#xff08;建议自己找一个密码本&#xff09; 一、准备工作 工具&#xff1a;python 二、编写代码 在桌面新建一个文件 如果你新建的文件没有后缀名.txt&#xff0c;请进行如下设置 打开刚刚新建的文件&#…

pg数据库安装

pg数据库安装 下载对应的安装包 安装服务 使用安装包直接安装 rpm -ivh postgresql13-libs-13.1-3PGDG.rhel7.x86_64.rpm rpm -ivh postgresql13-13.1-3PGDG.rhel7.x86_64.rpm rpm -ivh postgresql13-server-13.1-3PGDG.rhel7.x86_64.rpm rpm -ivh postgresql13-contrib-…

NEUQACM双周赛(五)

文章目录 L1-1 计算摄氏温度&#xff08;C&#xff09;输入格式:输出格式:解题思路&#xff1a; L1-2 查验身份证&#xff08;C&#xff0c;模拟&#xff09;输入格式&#xff1a;输出格式&#xff1a;输入样例1&#xff1a;输出样例1&#xff1a;输入样例2&#xff1a;输出样例…

如何与TSC建立 EDI 连接?

Tractor Supply Co.&#xff08;以下简称TSC&#xff09;是美国一家农业和家畜用品零售公司&#xff0c;在美国各地拥有超过1,900家门店&#xff0c;提供各种农业、家畜、园艺和家居产品&#xff0c;包括动物饲料、草坪和花园用品、农业机械、工具和配件等。 通过EDI&#xff…

Linux用户权限——sudoers的深入剖析

一、sudo权限的配置 root账号登录系统不会记录root账号做了什么操作。 su虽然不记录以root执行了哪些命令&#xff0c;但会创建一条日志记录谁在什么时候变成了root。而su切换为root身份&#xff0c;仍然有很大的无法受控的权限&#xff0c;因此sudo是一个更好的选择。 sudo命令…

【面试题】JavaScript 的 8 种数据类型总结

JavaScript 数据类型 本文将介绍 JavaScript 的 8 种数据类型&#xff0c;结合代码对每种数据类型进行总结归纳。 一、数据类型 最新的 ECMAScript 标准定义了 8 种数据类型&#xff1a; 1.七种基本数据类型&#xff1a; 布尔值&#xff08;Boolean&#xff09;&#xff0…

Apache配置ssl常见错误问题汇总

对于站长来说&#xff0c;部署SSL证书来迁移到HTTPS是一个现实和重要的问题&#xff0c;那么&#xff0c;对于Apache系统来说&#xff0c;如何部署SSL证书实现HTTPS协议呢&#xff1f;下面小编为大家总结了几个比较常见的Apache配置ssl错误问题汇总。 Apache配置ssl常见错误一…