【python asyncio模块的使用示例】

asyncio是Python的一个异步I/O框架,允许使用async/await语法进行并发编程。以下是多个使用asyncio的例子:

异步执行的基本示例

import asyncio

async def hello_world():
    print("Hello, World!")

asyncio.run(hello_world())

异步休眠

import asyncio

async def async_sleep(duration):
    print(f"Sleeping for {duration} seconds...")
    await asyncio.sleep(duration)
    print(f"Slept for {duration} seconds")

asyncio.run(async_sleep(3))

异步获取网页内容

import asyncio
import aiohttp

async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

url = "https://www.example.com/"
html = asyncio.run(fetch(url))
print(html)

多个异步任务并发执行

import asyncio

async def print_numbers():
    for i in range(10):
        print(i)
        await asyncio.sleep(1)

async def print_letters():
    for letter in 'abcdefghij':
        print(letter)
        await asyncio.sleep(2)

async def main():
    task1 = asyncio.create_task(print_numbers())
    task2 = asyncio.create_task(print_letters())

    await asyncio.gather(task1, task2)

asyncio.run(main())

使用异步队列进行生产者-消费者模式

import asyncio
import random

async def producer(queue):
    for i in range(10):
        await asyncio.sleep(random.random())
        await queue.put(i)
        print(f"Produced {i}")

async def consumer(queue):
    while True:
        item = await queue.get()
        if item is None:
            break
        print(f"Consumed {item}")
        await asyncio.sleep(random.random())

async def main():
    queue = asyncio.Queue()
    producer_task = asyncio.create_task(producer(queue))
    consumer_task = asyncio.create_task(consumer(queue))

    await producer_task
    await queue.put(None)
    await consumer_task

asyncio.run(main())

以上示例展示了使用asyncio执行基本的异步任务,异步休眠,获取网页内容,同时执行多个任务和实现生产者-消费者模式。

异步执行多个协程并获取结果

import asyncio

async def square(x):
    await asyncio.sleep(1)
    return x * x

async def main():
    tasks = [square(i) for i in range(5)]
    results = await asyncio.gather(*tasks)
    print(results)

asyncio.run(main())

异步执行有超时限制的任务

pythonCopy codeimport asyncio

async def long_running_task():
    await asyncio.sleep(5)
    return "Task completed"

async def main():
    try:
        result = await asyncio.wait_for(long_running_task(), timeout=3)
    except asyncio.TimeoutError:
        print("Task timeout")
    else:
        print(result)

asyncio.run(main())

异步执行周期性任务

pythonCopy codeimport asyncio

async def periodic_task(interval):
    while True:
        print("Periodic task executed")
        await asyncio.sleep(interval)

async def main():
    task = asyncio.create_task(periodic_task(2))
    await asyncio.sleep(10)
    task.cancel()
    try:
        await task
    except asyncio.CancelledError:
        print("Periodic task cancelled")

asyncio.run(main())

你可能感兴趣的:(python,爬虫,python,开发语言,爬虫)