使用ThreadPoolExecutor可以简洁地完成简单多线程任务,获取线程返回值的顺序有两种,一种是按线程创建顺序返回,第二种是按线程完成顺序返回(虽然返回顺序不同,执行时间应该是一样的)。
按线程创建顺序返回
import time
import concurrent.futures
times = [3, 1, 2]
def sleeper(secs):
time.sleep(secs)
print('I slept for {} seconds'.format(secs))
return secs
# returns in the order given
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
print(list(executor.map(sleeper, times))