下面是一个示例代码,展示了如何设计一个异步线程池,并实现线程池满了就等待,空了就继续扔的功能:
import concurrent.futures
import time
# 创建一个线程池
thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=8)
# 定义任务函数
def task_function(task_id):print(f"Task {task_id} started")# 执行任务的逻辑time.sleep(10)print(f"Task {task_id} completed")
# 提交任务到线程池
def submit_task(task_id):future = thread_pool.submit(task_function, task_id)return future# 示例任务列表
task_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# 提交任务到线程池,并等待任务完成
for task_id in task_list:future = submit_task(task_id)# 等待线程池中的任务完成while thread_pool._work_queue.qsize() >= thread_pool._max_workers:pass# 关闭线程池
thread_pool.shutdown()
输出结果