1 from concurrent.futures import ThreadPoolExecutor as Pool
2 from concurrent.futures import wait
3 import requests
4
5
6
7 URLS = ['http://qq.com', 'http://sina.com', 'http://www.baidu.com', ]
8
9
10 def task(url, timeout=10):
11 return requests.get(url, timeout=timeout)
12
13
14 with Pool(max_workers=3) as executor:
15 future_tasks = [executor.submit(task, url) for url in URLS]
16
17 for f in future_tasks:
18 if f.running():
19 print('%s is running' % str(f))
20 '''
21 wait方法接会返回一个tuple(元组),tuple中包含两个set(集合),一个是completed(已完成的)另外一个是uncompleted(未完成的)。
22 使用wait方法的一个优势就是获得更大的自由度,它接收三个参数FIRST_COMPLETED, FIRST_EXCEPTION和ALL_COMPLETE,默认设置为ALL_COMPLETED。
23 timeout控制wait()方法返回前等待的时间。
24 return_when决定方法什么时间点返回:如果采用默认的ALL_COMPLETED,程序会阻塞直到线程池里面的所有任务都完成;如果采用FIRST_COMPLETED参数,程序并不会等到线程池里面所有的任务都完成。
25 '''
26 results = wait(future_tasks)
27 done = results[0]
28 for x in done:
29 print(x)