首页 > 其他分享 >协程-应用

协程-应用

时间:2023-03-03 23:24:06浏览次数:32  
标签:tasks 协程 name url await http 应用 async

# request.get() 同步的代码 -> 异步操作aiohttp

import os
# 异步io
import asyncio
# 异步file
import aiofiles
# 异步 http
import aiohttp

# 如果文件夹不存在则创建文件夹,用来放图片
if not os.path.exists("other/tupian"):
    os.mkdir("other/tupian")

urls = [
    'http://pic.bizhi360.com/litimg/11537.jpg',
    'http://pic.bizhi360.com/litimg/11508.jpg',
    'http://pic.bizhi360.com/litimg/11469.jpg'
]


# url = 'http://pic.bizhi360.com/litimg/11537.jpg'
# name = url.rsplit("/", 1)[-1]
# print(name)

async def aiodownload(url):
    # 发起请求
    # 得到图片内容
    # 保存到文件
    name = url.rsplit("/", 1)[-1]  # 切片,总共切了一次,选了最后一个位置,得到内容
    # "http://pic.bizhi360.com/litimg","11537.jpg"
    # async with aiohttp.ClientSession() as session 为异步上下文管理器,在请求结束时或者发生异常请求时支持自动关闭实例化的客户端会话。
    async with aiohttp.ClientSession() as session:  # request
        async with session.get(url) as resp:  # resp = request.get()
            # 请求回来了,写入文件
            # 异步写入
            async with aiofiles.open('./other/tupian/' + name, "wb") as fp:
                # await 等待。 等待它写完
                # await 只能在带有 async 关键字的函数中运行。
                await fp.write(await resp.content.read())

    print(name, "下载成功!!!")


async def main():
    tasks = []
    for url in urls:
        # 会报弃用警告:从 Python 3.8 开始,不推荐使用 asyncio.wait() 显式传递协程对象,
        # 并计划在 Python 3.11 中删除。await asyncio.wait(tasks)
        # tasks.append(aiodownload(url))

        # create_task 创建任务
        tasks.append(asyncio.create_task(aiodownload(url)))
    # print(tasks)
    await asyncio.wait(tasks)


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

 

标签:tasks,协程,name,url,await,http,应用,async
From: https://www.cnblogs.com/Wesuiliye/p/17177332.html

相关文章

  • unity3D使用协程控制怪物的生命周期
    分析九个坑位要随机生成怪物,随机时间生成类似打地鼠协程(Coroutines)协程:协程是一个分部执行,遇到条件(yieldreturn语句)时会挂起,直到条件满足时才会被唤醒继续执行后面的......
  • 协程
     importasyncioimporttime#协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。#简而言之,其实就是通过一个线程实现代码块相互切换执行#async......
  • Spring Boot应用如何快速接入Prometheus监控
    1.Micrometer简介Micrometer为Java平台上的性能数据收集提供了一个通用的API,它提供了多种度量指标类型(Timers、Guauges、Counters等),同时支持接入不同的监控系统,例如Influ......
  • RTOS 应用中的调度策略
    Original 麦克泰 麦克泰技术 2023-02-2411:00 Postedon 上海 从前后台架构的软件开发过渡到使用实时操作系统(RTOS)可能是一项困难的工作。但使用RTOS有许......
  • [汽车/制造]汽车大数据应用探讨【待续】
    1概述随着数字化浪潮席卷全球,我国汽车工业面临着外部环境日趋复杂严峻,传统的供应链、生产/制造、服务模式(售前营销/售后服务)都面临着前所未有的挑战。汽车产业由此迈......
  • 从Linq的Where方法理解泛型、委托应用场景
      最近遇到了一个问题,Linq的Where里面传递的是什么?Where的功能是什么实现的?没有第一时间答上来,在整理相关资料后决定自行实现Linq的Where方法来加深印象。什么是泛型......
  • Hypium框架使能ArkTS应用高效测试
     HarmonyOS发布了声明式开发框架ArkUI,带来了极简高效的开发体验,备受广大开发者的青睐。那么,我们在开发过程中,如何确保ArkTS应用的功能和界面满足预期呢?ArkTS应用怎样高效......
  • Go组件库总结之协程睡眠唤醒
    本篇文章我们用Go封装一个利用gopark和goready实现协程睡眠唤醒的库。文章参考自:https://github.com/brewlin/net-protocol1.gopark和goready的声明//go:linknamegopark......
  • 用PWA提升Web应用的性能和用户体验
       PWA是一种Web应用的新范式,它将Web应用和原生应用的体验结合在一起。PWA可以让Web应用离线缓存、全屏模式、桌面快捷方式等,提供与原生应用类似的用户体验......
  • Java应用【Ⅻ】使用Java实现机器学习算法:聚类、分类、预测
    一、引言1、机器学习算法概述机器学习是一种人工智能技术,旨在通过使用数据和统计分析来让计算机系统自动改进性能。机器学习算法可分为三大类:聚类、分类和预测。聚类算法用......