面试题答案
一键面试设计思路
- 首先,将任务列表按照执行时间排序。
- 然后,采用类似“轮流分配”的策略,把任务依次分配给线程池中的线程,以达到负载均衡的效果。
主要实现代码
import concurrent.futures
import time
def task(t):
time.sleep(t)
return t
def main():
task_list = [5, 2, 3, 4, 1]
task_list.sort()
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
results = list(executor.map(task, task_list))
print(results)
if __name__ == "__main__":
main()
在上述代码中:
task
函数模拟了一个任务,其执行时间为传入的参数t
。main
函数中,首先定义了任务列表task_list
并对其进行排序。- 使用
concurrent.futures.ThreadPoolExecutor
创建一个线程池,最大线程数为3。 - 使用
executor.map
方法将任务分配给线程池中的线程执行,并获取结果。