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)