1、添加一个任务
task2 = visit_url('http://another.com', 3) asynicio.run(task2)
2、这 2 个程序一共消耗 5s 左右的时间。并没有发挥并发编程的优势
import asyncio import time async def visit_url(url, response_time): """访问 url""" await asyncio.sleep(response_time) return f"访问{url}, 已得到返回结果" async def run_task(): """收集子任务""" task = visit_url('http://wangzhen.com', 2) task_2 = visit_url('http://another', 3) await asyncio.run(task) await asyncio.run(task_2) asyncio.run(run_task()) print(f"消耗时间:{time.perf_counter() - start_time}")
3、如果是并发编程,这个程序只需要消耗 3s,也就是task2的等待时间。要想使用并发编程形式,需要把上面的代码改一下。asyncio.gather 会创建 2 个子任务,当出现 await 的时候,程序会在这 2 个子任务之间进行调度。
async def run_task(): """收集子任务""" task = visit_url('http://wangzhen.com', 2) task_2 = visit_url('http://another', 3) await asynicio.gather(task1, task2)
以上就是python在协程中增加任务的方法,希望能对大家有所帮助。更多Python学习指路:
伴沃教育还为您提供以下相关内容希望对您有帮助:
python协程(4):asyncio
await + 可等待的对象(协程对象、Future对象、Task对象 -> IO等待) 注意:在python3.4中是通过asyncio装饰器定义协程,在python3.8中已经移除了asyncio装饰器。事件循环,可以把他当做是一个while循环,这个while循环在周期性的运行并执行一些协程(任务),在特定条件下终止循环。 loop = async...
Python 协程详解,都在这里了
Python协程,也称微线程或纤程,不同于进程和线程,其工作方式类似于函数调用。在asyncio模块中,使用async关键字定义的异步函数调用即为协程。协程的核心在于程序对控制流的控制,而非由操作系统决定。通过yield关键字或async/await语法,Python在不同版本中逐步支持协程功能。早期的greenlet模块提供了无栈化微...
一文带您了解Python中的并发:异步(Asyncio)和多线程(Multithreading)_百度...
在Python的世界中,高效的并发处理是提升程序性能的关键。主要的两种方法是异步编程(Asyncio)和多线程(Multithreading)。异步利用协程在单线程中并发执行任务,而多线程则是通过多个执行线程在同一个进程内并行工作。并发性让程序能够同时处理多个任务,例如,Python的threading模块使得创建和管理多线程变得简单...
python多线程的几种方法
1. 使用`threading`模块:Python标准库中的`threading`模块提供了多线程支持。可以通过创建`Thread`对象来开启新的线程。这是实现多线程编程的基础方法。2. 使用`concurrent.futures`模块:Python的`concurrent.futures`模块提供了更高级的异步任务处理机制,包括线程池和进程池。它简化了多线程或多进程编程中...
一文带您了解Python中的并发:异步(Asyncio)和多线程(Multithreading)_百度...
并发性,即同时处理多个任务,是编程中的关键概念,它能提升程序性能。多线程模型中,Python的threading模块支持创建和管理多个独立执行流,如示例中的print_numbers和print_letters,它们在各自的线程中并行运行,提高了执行效率。而Asyncio,自Python 3.4引入,采用协程实现并发。与多线程不同,它使用单线程...
python asyncio
1、asyncio.run() 函数用来在非协程函数中调用协程 asyncio.run(asyncTask())2、使用 await 等待一个协程。await asyncTask()3、asyncio.create_task() 用函数将协程打包为一个 Task 排入日程准备执行,返回 asyncio.Task 对象。此函数 在 Python 3.7 中被加入。task1 = asyncio.create_task(async...
Python协程之asyncio
在 Python3.7+ 中,运行这个 asyncio 程序只需要一句: asyncio.run(main()) ,而在 Python3.6 中,需要手动获取事件循环并加入协程任务:事件循环就是一个循环队列,对其中的协程进行调度执行,当把一个协程加入循环,这个协程创建的其他协程都会自动加入到当前事件循环中。其实协程对象也不是直接...
python并发 | asyncio模块
Python的asyncio模块通过事件循环驱动协程,优化了io-bound任务的并发处理。以下是asyncio模块的核心概念和使用方法的概述:asyncio的核心在于事件循环,它像一个调度器,决定何时执行任务。尽管一次只能执行一个任务,但通过异步调用和任务管理,可以确保每个任务的结束时间明确。Coroutine是asyncio的核心概念,包括...
如何用python写一个协程
那协程是否可以用`yield`而不是`yield from`。我经过尝试,发现协程的调用有特殊的方式。而最常规的迭代器都是直接调用就可以的。所以,同样是函数,那协程是否可以脱离`event_loop`(消息循环)调用。我还尝试过通过`yield`构造一个协程。没有报错也运行成功了,所以应该没有问题。
在Python中使用Asyncio系统(3-4)Task 和 Future
它满足函数的类型签名(因为Task是Future的子类),但从Python 3.8开始,我们不再允许在Task上调用set_result():尝试这样做将引发RuntimeError。这个想法是,一个Task代表一个正在运行的协程,所以结果应该总是来自于task自身。 (L10, L24)但是,我们仍然可以cancel()一个任务,它将在底层协程中引发CancelledError。