concurrent.futures模塊

1.concurrent.futures模塊介紹app

2.ThreadPoolExecutor線程池使用dom

3.ProcessPoolExecutor進程池使用異步

4.其餘方法使用函數

 

 

1.concurrent.futures模塊介紹spa

 1 # 介紹
 2     concurrent.futures模塊提供了高度封裝的異步調用接口
 3     ThreadPoolExecutor:線程池,提供異步調用
 4     ProcessPoolExecutor: 進程池,提供異步調用
 5 
 6 # 基本方法
 7 # submit(fn, *args, **kwargs)  異步提交任務
 8 
 9 # map(func, *iterables, timeout=None, chunksize=1)  取代for循環submit的操做
10 
11 # shutdown(wait=True) 至關於進程池的pool.close()+pool.join()操做
12     wait=True,等待池內全部任務執行完畢回收完資源後才繼續
13     wait=False,當即返回,並不會等待池內的任務執行完畢
14     但無論wait參數爲什麼值,整個程序都會等到全部任務執行完畢
15     submit和map必須在shutdown以前
16 
17 # result(timeout=None) 取得結果
18 
19 # add_done_callback(fn) 回調函數

 

 

2.ThreadPoolExecutor線程池使用線程

 1 from concurrent.futures import ThreadPoolExecutor
 2 import time
 3 import random
 4 
 5 def task(n):
 6     print(n)
 7     time.sleep(random.randint(1, 3))
 8     return n ** 2
 9 
10 if __name__ == '__main__':
11     executor = ThreadPoolExecutor(max_workers=5)       # 最多5個線程
12     futures = []
13     for i in range(11):
14         future = executor.submit(task, i)
15         futures.append(future)
16     executor.shutdown(True)
17     print('+++>')
18     for future in futures:
19         print(future.result())

 

 

3.ProcessPoolExecutor進程池使用code

 1 from concurrent.futures import ProcessPoolExecutor
 2 import os
 3 import time
 4 import random
 5 
 6 def task(n):
 7     print('%s is runing' % os.getpid())
 8     time.sleep(random.randint(1, 3))
 9     return n ** 2
10 
11 if __name__ == '__main__':
12     executor = ProcessPoolExecutor(max_workers=3)       # 最多3個進程
13     futures = []
14     for i in range(11):
15         future = executor.submit(task, i)
16         futures.append(future)
17     executor.shutdown(True)
18     print('+++>')
19     for future in futures:
20         print(future.result())

 

 

4.其餘方法使用blog

 1 # map方法使用
 2 import time
 3 from concurrent.futures import ThreadPoolExecutor
 4 
 5 def func(n):
 6     time.sleep(2)
 7     print(n)
 8     return n * n
 9 
10 def call_back(m):
11     print('結果是 %s' % m.result())
12 
13 tpool = ThreadPoolExecutor(max_workers=5) 
14 tpool.map(func, range(20))  # 注意map方法拿不到返回值
 1 # 回調函數
 2 import time
 3 from concurrent.futures import ThreadPoolExecutor
 4 
 5 def func(n):
 6     time.sleep(2)
 7     print(n)
 8     return n * n
 9 
10 # 回調函數
11 def call_back(m):
12     print('結果是 %s' % m.result())
13 
14 tpool = ThreadPoolExecutor(max_workers=5)
15 for i in range(20):
16     tpool.submit(func, i).add_done_callback(call_back)
相關文章
相關標籤/搜索