python-future

future 是 python 的的并发库,py2 需要单独安装,py3已经集成到标准库中了。future用的比较多的是线程池和进程池。

线程池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import random
import time
from concurrent.futures import ThreadPoolExecutor
from concurrent.futures import as_completed


def foo(i):
# do something
time.sleep(random.randint(1, 5))
return i

# max_workers 指定线程池大小,如果不指定默认是 cpu *5
p = ThreadPoolExecutor(max_workers=4)

# 提交任务
tasks = [p.submit(foo, i) for i in range(10)]

# 获取返回结果, 这里的返回并不是按照提交顺序来的,而是谁先完成,谁先返回
for future in as_completed(tasks):
print(future.result())


# 如果希望有序返回,使用 map
# 这里 result 是生成器,可以使用 list(result) 转换为 list 类型
result = p.map(foo, range(10))