在学习多线程和异步编程时,我遇到了一个实际问题。假设我需要处理一个任务列表(任务可能是下载文件、爬取网页等),而这些任务需要动态添加,同时又需要控制最大并发任务的数量(例如限制为5个)。请问应该如何设计一个动态任务队列调度器以满足以下需求:
可以动态添加任务;
支持控制最大并发任务数量;
任务的处理可以是同步或异步的;
处理完一个任务后会自动取下一个任务进行处理。
代码部分: 如果使用 threading 或 asyncio,如何实现这个调度器?请给出实现思路或关键代码。
问题相关的代码片段:
import asyncio
async def task(name, delay):
print(f"Task {name} started")
await asyncio.sleep(delay)
print(f"Task {name} finished")
# 示例任务函数
tasks = [
{"name": "Task 1", "delay": 2},
{"name": "Task 2", "delay": 1},
{"name": "Task 3", "delay": 3},
{"name": "Task 4", "delay": 4},
]
# 请在这里实现调度器逻辑,满足上述需求。