python3.7 协程实战

Python 高并发 协程与任务— Python 3.7 版本(与3.6版本有区别) 协程与任务 本节将简述用于协程与任务的高层级 API。 协程 可等待对象 运行 asyncio 程序 创建任务 休眠 并发运行任务 屏蔽取消操作 超时 简单等待 来自其他线程的日程安排 内省 Task 对象 基于生成器的协程 协程 协程通过 async/await 语法进行声明,是编写异步应用的推荐方式。例如,以下代码段 (需要 Python 3.7+) 打印 "hello" 阅读详情

协程实战

只介绍常见用法,底层用法请回顾 yield from,原理请参考论文

cpu密集

对于cpu密集操作,当然只能靠多进程方式

io密集

对于io密集型操作,传统上用多线程方式。
现在,更加高效的的方式来了,协程 !

协程的本质是函数回调,
不需要os调度,效率极高,且不需要锁。
缺点是回调得自己写,代码老复杂了

python3.7 协程代码

官网两个例子

使用 asyncio.create_task() 方法创建任务

import asyncio

async def test():
    asyncio.sleep(1)

async def main():
    task1 = asyncio.create_task(test())
    task2 = asyncio.create_task(test())
    
    await task1
    await task2

asyncio.run(main())

使用 asyncio.gather() 方法搜集多个任务

import asyncio


async def who(name):
    asyncio.sleep(1)
    print(name)


async def main():
    # Schedule three calls *concurrently*:
    await asyncio.gather(
        who('Bob'),
        who('Amy'),
        who('Mike'),
    )

asyncio.run(main())

常用的用法

单核上的协程

tasks = [asyncio.create_task(test(1)) for proxy in range(10000)] 创建了任务
[await t for t in tasks] 丢到执行队列里面去

这里共一万个任务,耗时1.2640011310577393秒 (二百块的AMD处理器)

import aiohttp
import asyncio
import time


async def test(time):
    await asyncio.sleep(time)


async def main():
    start_time = time.time()
    tasks = [asyncio.create_task(test(1)) for proxy in range(10000)]
    [await t for t in tasks]
    print(time.time() - start_time)

if __name__ == "__main__":
    asyncio.run(main())
多核上的协程

多核上要用 当然 要用到 《多进程 + 协程》
总共10000任务,分成四个进程跑,运行时间1.08 秒(二百块的AMD处理器)
Process1 耗时 : 1.0899991989135742
Process2 耗时 : 1.0870001316070557
Process3 耗时 : 1.0749988555908203
Process4 耗时 : 1.070998191833496

from multiprocessing import Pool
import asyncio
import time


async def test(time):
    await asyncio.sleep(time)


async def main(num):
    start_time = time.time()
    tasks = [asyncio.create_task(test(1)) for proxy in range(num)]
    [await t for t in tasks]
    print(time.time() - start_time)


def run(num):
    asyncio.run(main(num))


if __name__ == "__main__":
    p = Pool()
    for i in range(4):
        p.apply_async(run, args=(2500,))
    p.close()
    p.join()

实战-检验代理有效性

爬虫业务需要代理,自建的代理池需要验证模块。
需要爬哪个网站,就针对哪个网站进行检测。
比如这里是 http://xa.ganji.com/
测试用例如下:

import aiohttp
import requests
import asyncio


async def test_single_proxy(proxy):
    # conn = aiohttp.TCPConnector(ssl=False)
    # async with aiohttp.ClientSession(connector=conn) as session:
    async with aiohttp.ClientSession() as session:
        try:
            if isinstance(proxy, bytes):
                proxy = proxy.decode('utf8')
            real_proxy = 'http://' + proxy
            async with session.get('http://xa.ganji.com/', proxy=real_proxy, timeout=6) as response:
                if response.status in [200]:
                    print(proxy, 'valid pass ……')
                else:
                    print(proxy, 'remove')
        except:
            print('请求失败')


api_list = [
    '60.169.217.151:46174',
    '27.220.121.8:54276',
    '180.122.145.179:33419',
    '59.58.209.134:36154',
    '123.180.209.136:41878',
    '123.188.102.233:38182',
    '60.182.33.2:23016',
    '171.11.138.254:33794',
    '123.162.151.90:23693',
    '125.65.91.130:24209'
]


async def main(api_list):
    tasks = [asyncio.create_task(test_single_proxy(proxy))
             for proxy in api_list]
    [await t for t in tasks]

if __name__ == "__main__":
    asyncio.run(main(api_list))

python 3.7 协程 协程: 协程是实现并发编程的一种方式。一说并发,你肯定想到了多线程 / 多进程模型,没错,多线程 / 多进程 node2:/root/python/20200524#cat t1.py import time def crawl_page(url): print('crawling {}'.format(url)) sleep_time = int(url.split('_')[-1]) time.sleep(sleep_time) print('OK {}'... 阅读详情

相关推荐

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 985

python3.7以后 协程的使用方法 asyncio

网上找了很多python的asyncio的示例,很多都是用 # 获取EventLoop: loop = asyncio.get_event_loop() # 执行coroutine loop.run_until_complete(hello()) loop.close() 通过create_future向里面添加task的方法来进行异步IO调用. 这种方法显然不是很好理解,在python3.7中...

会飞的鱼 3338

Halcon —— 图像像素类型与转换

图像类型 就目前工业领域主流的图像处理工具halcon来讲,有以下几张图像类型:‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’,具体含义如下图所示。相互间的转换可通过convert_image_type算子完成,但盲目转换会导致图像像素值异常。 ‘byte’ 每像素1字节,无符号 值范围: (0到255) ‘int1’ 每像素1字节,有符号 值范围: (-128到127) ‘

baidu_35536188的博客 1万+

python协程1

python协程,asyncio

world_in_world的博客 1188

Infineon MOSFET开关损耗计算实战指南

本文是英飞凌MOSFET开关损耗计算的实战指南。针对MOSFET发热问题,文章深入剖析了开关损耗的产生机理,并基于Infineon数据手册的关键参数,手把手推导了开通与关断损耗的工程计算公式。同时,指南强调了栅极电阻、寄生参数等实际因素对损耗的影响,并提供了从理论计算到实测优化的完整路径,帮助工程师精准评估与优化电源设计。

weixin_29212867的博客 447

DAC60501与STM32的I2C通信实战:从寄存器配置到电压输出

本文详细介绍了如何使用STM32通过I2C通信驱动DAC60501数模转换器,实现精确的模拟电压输出。内容涵盖从硬件连接到软件模拟I2C驱动编写,再到DAC寄存器配置与电压计算的全流程实战指南,并提供了关键的驱动实例代码和常见问题调试技巧,帮助开发者快速掌握这一嵌入式开发中的实用技能。

weixin_29197835的博客 369

python 线程池_《Python》线程池、携程

一、线程池(concurrent.futures模块)#1 介绍concurrent.futures模块提供了高度封装的异步调用接口ThreadPoolExecutor:线程池,提供异步调用ProcessPoolExecutor: 进程池,提供异步调用Both implement the same interface, whichis defined by the abstract Executo...

weixin_39654903的博客 289

Java后端实战:钉钉互动卡片消息从配置到生产级对接

在企业级消息推送场景中,机器人通知已从简单的文本向富交互演进。其核心原理在于通过可交互的卡片模板,将传统单向通知升级为双向、有状态的微型应用界面,实现了用户无需跳转即可完成操作的技术价值。这广泛应用于审批、任务确认、数据填报等需要即时反馈的业务流程。本文聚焦于钉钉平台,深入剖析其互动卡片消息机制,并基于Java后端,系统讲解如何实现包括安全验签、异步回调与卡片动态更新在内的生产级对接方案,涵盖配置管理、服务降级等工程实践关键点,助力构建稳定高效的企业消息交互服务。

weixin_30617737的博客 439

python协程专题

又叫做微线程,在统一线程里,不同子程序可以中断执行其他子程序。中断后,可以从中断的地方继续执行。协程拥有自己的寄存器上下文和栈。用async定义的一个函数,调用时候不会立即执行,而是会返回一个协程对象。python3.7之前协程对象需要注册到事件循环,由事件循环进行调用。python3.7之后协程对象直接使用async.run运行。

haixiao0720的博客 867

基于STM32的嵌入式平台实现EtherCAT主站

本文将介绍如何在基于STM32的嵌入式平台上构建EtherCAT主站,并提供相应的源代码。使用SOEM库提供的API函数,我们可以实现与EtherCAT从站设备的实时通信和数据交换。在STM32的代码中,使用SOEM库提供的API函数初始化EtherCAT主站。在SOEM库中,我们可以找到EtherCAT主站的实现代码和相关的API函数。使用SOEM库提供的API函数实现EtherCAT主站的功能,包括发送和接收EtherCAT数据帧、处理从站设备的状态等。确保连接正常并且设备能够相互通信。

CodeSageX的博客 2838

基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计

摘要: 针对环卫车辆动态称重需求,本研究提出一种基于CNN-LSTM融合网络的频率分析方法。通过在实验室构建振动频率采集系统,获取不同载重下的结构响应数据,经MATLAB进行信号处理和特征提取后,建立频率-质量的非线性映射模型。实验表明,该算法在静态和模拟动态场景下平均绝对误差小于1.5%,显著优于传统方法,为环卫车智能化管理提供了高精度实时称重方案。 关键词: 动态称重;深度学习;频率分析;CNN-LSTM;MATLAB。

AI的内部世界的博客 375

20 | 揭秘 Python 协程

到这里,今天的主要内容就讲完了。今天用了较长的篇幅,从一个简单的爬虫开始,到一个真正的爬虫结束,在中间穿插讲解了 Python 协程最新的基本概念和用法。这里简单复习一下。协程和多线程的区别,主要在于两点,一是协程为单线程;二是协程由用户决定,在哪些地方交出控制权,切换到下一个任务。协程的写法更加简洁清晰,把 async / await 语法和 create_task 结合来用,对于中小级别的并发需求已经毫无压力。

qq_37756660的博客 1062

数据库常见面试题(附答案)

1.事务四大特性 原子性,要么执行,要么不执行 隔离性,所有操作全部执行完以前,其它会话不能看到过程 一致性,事务前后,数据总额一致 持久性,一旦事务提交,对数据的改变就是永久的 2.数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别 脏读:事务B读取事务A还没有提交的数据 不可重复读:两次事务读的数据不一致 幻读:事务A修改了数据,事务B也修改了数据,这时在事务A看...

csdn问鼎 46万+

python协程的作用_Python 协程、线程、进程使用

总结一下Python 协程、线程、进程的用法,基于Python 3.7。协程协程是单线程的。协程的作用,是在执行函数A时,可以随时中断,去执行函数B,然后中断继续执行函数A(可以自由切换)。但这一过程并不是函数调用(没有调用语句),这一整个过程看似像多线程,然而协程只有一个线程执行。下面记录一下 asyncio 协程的用法。设置超时的协程如果要求协程有超时,可以使用 asyncio.wait() ...

weixin_39821874的博客 196

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

python协程等待执行完成_Python异步IO系列:协程走起来!

前面,我们从大的结构上认识了最新的Python 3.7里面的asyncio标准库。接下来,我们就开始一点一点的来学习asyncio的使用。一、安装 Python 3.7我的系统是 Ubuntu 16.04,里面有 Python 2.7 和 Python 3.6。2.7是系统自带的,其它系统软件对此有依赖,不能破坏。3.6 是通过ppa源apt install的,然后通过 virtualenvwra...

weixin_29197051的博客 1477

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

python异步io协程读文件_asyncio异步IO--协程(Coroutine)与任务(Task)详解

说明:本文翻译自Coroutines and Tasks,主要介绍asyncio中用于处理协程和任务的方法和接口。在翻译过程中,译者在官方文档的基础上增加了部分样例代码和示意图表,以帮助读者对文档的理解。本文所述内容主要针对Python3.7,对3.7之前的版本有可能不适用,敬请注意。原创内容,转载请注明出处。译者:马鸣谦协程协程(coroutines)是通过async/await定义函数或方法,...

weixin_39668408的博客 692

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

python 协程和异步的关系_asyncio异步IO--协程(Coroutine)与任务(Task)详解

说明:本文翻译自Coroutines and Tasks,主要介绍asyncio中用于处理协程和任务的方法和接口。在翻译过程中,译者在官方文档的基础上增加了部分样例代码和示意图表,以帮助读者对文档的理解。本文所述内容主要针对Python3.7,对3.7之前的版本有可能不适用,敬请注意。原创内容,转载请注明出处。译者:马鸣谦协程协程(coroutines)是通过async/await定义函数或方法,...

weixin_39819283的博客 634

Python 协程详解

什么是协程 Python 对协程的支持经历了多个版本: 一、协程实现方法: 1、greenlet,早期模块 2、yield关键字(Python2.x开始) 3、asyncio装饰器(Python 3.4开始) 4、async、await关键字(Python 3.5开始) 5、gevent 二、协程的运行原理 三、协程应用场景 1、抢占式调度的缺点 2、用户态协同调度的优势 四、协程使用注意事项...

c_lanxiaofang的博客 1万+

python协程+异步实战!

实现了 __aiter__()和 __anext__()方法的对象。

墨城的博客 863

Python 彻底解读协程与异步【看完包会】

title: Python 协程与异步 copyright: true top: 0 date: 2018-08-11 10:15:50 tags: categories: Python进阶笔记 permalink: password: keywords: 协程 description: Python2.7中用代码实现协程,同时区分同步与异步,以及异步的表现形式,回调与协程。 像烟花也是过一生,...

浪子燕青的博客 4227

【Python】协程以及多进程+协程的使用

在 Python 中,同步和异步通常是指代码执行的模式。同步:当程序执行同步操作时,程序将等待该操作完成,然后才执行下一段代码。这种模式被称为同步模式。在同步模式下,程序必须等待操作完成之后才能继续执行下一步操作。异步:在异步模式下,程序执行操作时,不需要等待该操作完成,而是可以继续执行其他操作。当该操作完成后,程序将通知其结果。这使得程序可以执行多个操作而不必等待每个操作完成。异步操作通常使用回调函数来处理操作结果。

黎明总是如期而至 2039

python之协程asyncio的学习

python,async,range断点续传,高并发下载

qq_40978256的博客 2231

python3协程数量限制_多任务(3):协程

代码环境:python3.6上一篇文章我们讲了 python 中多线程的使用:点击阅读,现在我们讲讲 python 中的协程。异步IO我们知道,CPU 速度远远快于磁盘、网络等 IO。在 IO 编程中,假如一个 IO 操作阻塞了当前线程,会导致其他代码无法执行,所以我们使用多线程或者多进程来并发执行代码。但是,系统资源是有限的,一旦线程数量过多,CPU 的时间就花在线程切换上了,真正执行代码的时间...

weixin_39815879的博客 1709

Python 协程

协程的意义,事件循环/async/await,爬虫/mysql/redis操作案例

wanglei_storage的博客 3396

Python协程

协程(Coroutine)是一种比线程更轻量级的并发执行单元。它们允许在单个线程中执行多个任务,通过非阻塞方式切换任务,实现并发执行。协程主要用于I/O密集型任务,可以有效提高程序的性能和响应速度。asyncio是Python标准库中用于编写单线程并发代码的模块。它提供了事件循环、协程、任务和各种同步原语,支持网络编程、I/O操作等异步任务。主要组件事件循环(Event Loop):调度和管理协程的执行。协程(Coroutine):使用async和await定义的异步函数。任务(Task)

xnuscd的博客 1035
上一篇: linux 编译安装 redis6
下一篇: scrapy常用settings.py
CoolScript
博客等级 码龄9年 26粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值