Python也是可以多线程/异步编程的。异步有什么用呢?一个经典的思维模型如下:
一个程序需要到不同的服务器上去取数据,需要等各种数据收集齐了,才能继续下一步。假如有10个服务器,如果是单前程,那么只能发出一个请求,然后等待服务器返回,然后再发一下个请求。这样每个时刻只有一个服务器在工作而其他9个都是闲置的。更高效的方法是同事向10个服务器发送请求,然后马上拿到个“收据”,注意拿到收据只是说已经提交到服务器了,不代表已经完成请求。这个“收据”就叫future。请求全部提交完了,那么主程序就可以等着全部服务器完成请求。
以下是个具体的例子,用Python 2.7实现
from concurrent.futures import ThreadPoolExecutor, as_completed
# assume this is a request to a server
def add(x, y):
return x + y
executor = ThreadPoolExecutor(max_workers=10)
futures = []
for i in range(10):
futures.append(executor.submit(add, i, i + 1))
for f in as_completed(futures):
print(f.result())