下面是一个示例代码,展示了如何设计一个异步线程池,并实现线程池满了就等待,空了就继续扔的功能:
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()
输出结果