链接:https://pan.quark.cn/s/5dfd3dc521ba
本教程介绍了如何利用Python中的asyncio
模块创建和管理携程任务,通过示例说明了协程函数的定义、调用以及如何通过任务列表实现并发处理。
00:00 - 使用Python实现携程并发处理
协程函数的定义与异步调用
首先,我们定义一个简单的协程函数,并展示如何异步调用它。
import asyncio
import time
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
print(f"started at {time.strftime('%X')}")
await say_after(1, 'hello')
await say_after(2, 'world')
print(f"finished at {time.strftime('%X')}")
asyncio.run(main())
创建和执行多个任务
接下来,我们展示如何创建和执行多个任务以实现高效的并发处理。
import asyncio
import time
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
task1 = asyncio.create_task(say_after(1, 'hello'))
task2 = asyncio.create_task(say_after(2, 'world'))
print(f"started at {time.strftime('%X')}")
await task1
await task2
print(f"finished at {time.strftime('%X')}")
asyncio.run(main())
04:58 - 并行处理与携程函数的应用
使用asyncio.create_task
创建任务
通过使用asyncio.create_task
方法创建任务,并利用await
和sleep
方法实现异步执行,提高了程序的运行效率。
import asyncio
import time
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
tasks = [
asyncio.create_task(say_after(1, 'hello')),
asyncio.create_task(say_after(2, 'world'))
]
print(f"started at {time.strftime('%X')}")
for task in tasks:
await task
print(f"finished at {time.strftime('%X')}")
asyncio.run(main())
调整函数的同步/异步特性
通过调整函数的同步/异步特性来进一步优化程序性能。
import asyncio
import time
async def fetch_data(url):
print(f"Fetching data from {url}")
await asyncio.sleep(2) # Simulate network delay
print(f"Data fetched from {url}")
return f"Data from {url}"
async def main():
urls = ["url1", "url2", "url3"]
tasks = [asyncio.create_task(fetch_data(url)) for url in urls]
print(f"started at {time.strftime('%X')}")
results = await asyncio.gather(*tasks)
print(f"finished at {time.strftime('%X')}")
print(results)
asyncio.run(main())
通过这些示例代码,您可以更好地理解如何在Python中使用asyncio
模块实现携程并发处理,并通过调整函数的同步/异步特性来优化程序性能。