协程及运用

协程

  • 使用
    • 方法一
    • 方法二
    • 网页下载中使用
    • 有返回值
  • 实战
    • 图片实战

一个线程多个任务,线程由操作系统开启,比较耗资源。线程内合理分配任务,充分利用线程内的资源,一个任务io阻塞时,cpu处理其他非阻塞任务。

使用

方法一

import asyncio
# 函数前加async后,成为协程对象
async def as_func():print('协程基本使用')
if __name__ == '__main__':# 1 创建一个协程对象async_obj = as_func()print(async_obj)# 2 创建事件循环event_loop = asyncio.get_event_loop()# 3 执行协程对象event_loop.run_until_complete(async_obj)

方法二

  • 可能报RuntimeError: Event loop is closed
import asyncio
# 函数前加async后,成为协程对象
async def as_func():print('协程基本使用')
if __name__ == '__main__':# 1 创建一个协程对象async_obj = as_func()print(async_obj)# 2 执行协程asyncio.run(async_obj)

网页下载中使用

import asyncio
# 函数前加async后,成为协程对象
async def as_download(url, t):print(url + '协程下载')await asyncio.sleep(t)print(url + '下载完成')async def main():urls = ['url1','url2','url3','url4',]as_tasks = []for url in urls:as_task = asyncio.create_task(as_download(url, 2))as_tasks.append(as_task)await asyncio.wait(as_tasks)if __name__ == '__main__':asyncio.run(main())

有返回值

  • wait和gather
import asyncio
async def as_download1():print("协程1开始")await asyncio.sleep(1)print("协程1完成")return "协程1返回"
async def as_download2():print("协程2开始")await asyncio.sleep(2)print("协程2完成")return "协程2返回"
async def as_download3():print("协程3开始")await asyncio.sleep(3)print("协程3完成")return "协程3返回"
async def main():tasks = [asyncio.create_task(as_download3()),asyncio.create_task(as_download1()),asyncio.create_task(as_download2()),]# 取返回值一, wait, 返回的结果是set集合,无序result, pending = await asyncio.wait(tasks)for res in result:print(res.result())print("--以上是随机顺序--"*3)print("--以下是与任务相同顺序--"*3)# 取返回值二, gather, 同map一样,返回的结果的顺序与任务顺序一致# return_exceptions=True,即使有错误,任务正常执行,返回错误信息# return_exceptions=False,如果有错误,程序报错,任务停止result = await asyncio.gather(*tasks, return_exceptions=True)for res in result:print(res)
if __name__ == '__main__':asyncio.run(main())

实战

  • aiohttp和aiofiles安装
pip install aiohttp
pip install aiofiles

图片实战

链接: url_list
链接: url_list
链接: url_list

import aiohttp
import asyncio
import aiofiles
async def pic_download(url):try:name = url.split("/")[-1]# 创建session对象 with使用完后自行关闭async with aiohttp.ClientSession() as session:# 发送请求url请求async with session.get(url) as resp:# content.read()读取图片数据# resp.text()读取源代码即可content = await resp.content.read()# 写入文件会阻塞, 用aiofiles提升效率async with aiofiles.open(name, mode="wb") as f:await f.write(content)return "finish complete"except:print('报错')return "failure"
async def main():url_list = ["","","","","",]tasks = []for url in url_list:# 创建任务task = asyncio.create_task(pic_download(url))tasks.append(task)await asyncio.wait(tasks)
if __name__ == '__main__':# asyncio.run(main()) 此句与下2句等同,但在一些版本中报错loop = asyncio.get_event_loop()loop.run_until_complete(main())

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

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

相关文章

B站已经部分上线前台实名,如不同意实名,后期账号流量将收影响!

B站部分百万粉丝博主的主页显示账号运营人名字的政策是从10月31日开始的。当天,B站官方发布了《哔哩哔哩关于头部“自媒体”账号前台实名的公告》,表明了其前台实名制的实施计划。 B站部分上线前台实名的过程可以追溯到2021年。当时,中国政府…

window下杀指定端口进程

netstat -ano | findstr "8762" taskkill /pid 14992 /f

【LeetCode】144. 二叉树的前序遍历

144. 二叉树的前序遍历 难度:简单 题目 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入:root [] 输出:[]…

ARM裸机-18(SD卡启动)

1、主流的外存设备介绍 内存和外存的区别:一般是把这种RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM (read only memory,只读存储器,类似于Flash、SD卡之…

如何解决安卓手机无法预览pdf文件而是需要直接下载的问题

在开发中常常会遇到需要在一个应用里打开一份pdf文件并预览,经真机调试时发现在苹果手机上打开pdf文件能正常预览,但在安卓手机打开时却会需要我们下载才能预览,无法直接预览 为了解决这个问题,我们采用安装pdfH5插件的方式&…

计算机三级嵌入式知识总结(一)

一、ARM的七种异常类型 1、复位异常RESET “复位异常RESET”通常是指在电子设备或系统中发生了一个意外的复位或重启。这可能是由于硬件故障、软件问题或其他未知的原因引起的。当设备经历复位异常时,它可能会丢失正在进行的操作或设置,导致数据丢失或系…

LINUXZ

10.6.2 AT24C02 访问方法 设备地址 从芯片手册上可以知道,AT24C02 的设备地址跟它的 A2、A1、A0 引脚有关: 图 10.36 AT24C02 设备地址引脚配置 294 / 577 打开 I2C 模块的原理图: 开发板配套网盘资料\04_开发板原理图\ 04_Extend_modules\通…

SQL语句执行过程

一条 SQL 的执行过程可以大致分为以下几个步骤: 连接器: ○ 客户端与数据库建立连接,并发送 SQL 语句给数据库服务。 ○ 连接器验证客户端的身份和权限,确保用户有足够的权限执行该 SQL 语句。查询缓存: ○ 连接器首先…

基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码

基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鹰栖息算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鹰栖息优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

Motion v5.6.7 苹果电脑上的视频编辑

Motion mac是一款运行在苹果电脑上的视频编辑软件,它能让您自定Final Cut Pro字幕、转场和效果。 它可以在2D或3D空间中创建您自己的精美炫目的动画,同时还能在您工作时提供实时反馈。广色域支持让你的动态图形更显出色光彩。3D文字功能经过优化增强&am…

01背包与完全背包学习总结

背包问题分类见下图 参考学习点击:代码随想录01背包讲解 01背包问题: 核心思路: 1、先遍历物品个数,再遍历背包容量。因为容量最先是最大的,往背包里放物品,所以背包容量在慢慢减少,但背包容量…

CentOS7 firewall使用(开放和禁止端口、端口转发)

安装 安装命令 yum install firewalld -y 使用命令 systemctl start firewalld ##开启防火墙systemctl stop firewalld ##关闭防火墙systemctl status firewalld ##查看防火墙状态firewall-cmd --reload ##重启防火墙systemctl enable firewalld ##设置开启启动systemctl …

共享内存原理介绍及简单使用

每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放。可以认为进程是一个程序的一次执行过程。进程的内存空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信&#xff…

上海泗博MODBUS转PROFINET网关TS-180 网关连接LED显示屏应用案例

项目 常州某钢铁公司的轧钢车间为了更清晰地显示当天轧钢系统各环节的工作参数,如轧钢的日期、钢种、吐丝机设备运行情况等,引进了另一家为其定制的LED显示屏。轧钢系统各环节的设备参数通过西门子S7-1500PLC采集后,实时显示在LED显示屏上&am…

飞瓜数据B站丨B站UP主11月第3周榜单排行榜榜单(B站平台)发布!

飞瓜轻数发布2023年11月13日-11月19日飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营…

Linux网络——传输层

目录 一.再谈端口概念 二.UDP协议 1.UDP协议格式 2.UDP的特点 3.面向数据报 4.UDP的缓冲区 5.UDP使用注意事项 6.UDP协议在内核中的表现形式 7.基于UDP的应用层协议 三.TCP协议 1.TCP协议格式 2.TCP确认应答机制 3.超时重传机制 4.TCP报文六位标志位 5.滑动窗口 6…

制作抖音查券返利机器人的简易步骤

制作抖音查券返利机器人的简易步骤 随着社交电商的快速发展,越来越多的消费者开始通过优惠券和返利来省钱购物。而抖音作为一款广受欢迎的短视频平台,也为消费者提供了一个全新的购物体验。本文将结合微赚淘客系统,介绍如何制作一个简易的抖…

Web3与Web3.0: Web3指的是去中心化和基于区块链的网络,Web3.0指的是链接或语义网络。

目录 Web3与Web3.0: Web3指的是去中心化和基于区块链的网络 Web3.0指的是链接或语义网络。

Flutter开发实践:用一套代码构建多端精美应用

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

Python下使用requests库遇到的问题及解决方案

每一盏灯都有一个故事……当凌晨2点我的房间灯还亮着时,那就是我与BUG的一场生死博弈。一个人静静地坐在电脑前不断地写代码,感觉快要麻木了,好比闭关修炼一样枯燥无味。最终当我打通任督二脉后,bug修复迎来的一片曙光。 一、问题…