多線程:不應該開太多,線程之間切換會消耗
編寫方式 -直接返回處理
-通過回調函數處理 v.add_done_callback(done)
線程是CPU的最小工作單元,線程共享工作資源

""" 可以實現並發 但是,請求發送出去后和返回之前,中間時期線程空閑 編寫方式: - 直接返回處理 - 通過回調函數處理 """ ########### 編寫方式一 ########### """ from concurrent.futures import ThreadPoolExecutor import requests import time def task(url): response = requests.get(url) print(url,response) # 寫正則表達式 pool = ThreadPoolExecutor(7) url_list = [ 'http://www.cnblogs.com/wupeiqi', 'http://huaban.com/favorite/beauty/', 'http://www.bing.com', 'http://www.zhihu.com', 'http://www.sina.com', 'http://www.baidu.com', 'http://www.autohome.com.cn', ] for url in url_list: pool.submit(task,url) pool.shutdown(wait=True) """ ########### 編寫方式二 ########### from concurrent.futures import ThreadPoolExecutor import requests import time def task(url): """ 下載頁面 :param url: :return: """ response = requests.get(url) return response def done(future,*args,**kwargs): response = future.result() print(response.status_code,response.content) pool = ThreadPoolExecutor(7) url_list = [ 'http://www.cnblogs.com/wupeiqi', 'http://huaban.com/favorite/beauty/', 'http://www.bing.com', 'http://www.zhihu.com', 'http://www.sina.com', 'http://www.baidu.com', 'http://www.autohome.com.cn', ] for url in url_list: v = pool.submit(task,url) v.add_done_callback(done) pool.shutdown(wait=True)