python之線程池


ThreadPoolExecutor(線程池)

線程池一些知識點:

  1.  python中ThreadPoolExecutor(線程池)是concurrent.futures模塊下的,主線程中可以獲取某一個線程執行的狀態或者某一個任務執行的狀態及返回值。
  2. 通過submit返回的是一個future對象,它是一個未來可期的對象,通過它可以獲悉線程的狀態
  3. 通過submit提交函數到進程池中,submit(函數名,參數)
  4. 通過wait()判斷線程執行的狀態:wait(fs, timeout=None, return_when=ALL_COMPLETED),wait接受3個參數,fs表示執行的task序列;timeout表示等待的最長時間,超過這個時間即使線程未執行完成也將返回;return_when表示wait返回結果的條件,默認為ALL_COMPLETED全部執行完成再返回
  5. http的是IO請求,所以用線程

 

  •  編寫方法一:直接返回處理
from concurrent.futures import ThreadPoolExecutor
import requests

pool = ThreadPoolExecutor(10)

def task(url):
    response = requests.get(url)
    print(url,response)



url_list = (
    "https://www.bing.com",
    "https://www.shihu.com",
    "https://www.sina.com",
    "https://www.baidu.com",
    "https://www.cnblogs.com",
    "https://music.163.com/#"
)

for url in url_list:
    pool.submit(task,url)

pool.shutdown(wait=True)

result

https://www.bing.com <Response [200]>
https://www.baidu.com <Response [200]>
https://www.cnblogs.com <Response [200]>
https://music.163.com/# <Response [200]>
https://www.sina.com <Response [200]>

 

 

  • 編寫方法二:通過回調函數進行處理
from concurrent.futures import ThreadPoolExecutor
import requests

pool = ThreadPoolExecutor(10)

def task(url):
    response = requests.get(url)   #下載頁面
    return response

def done(future,*args,**kwargs):
    response = future.result()   #取得future對象進行操作
    print(response.status_code,response.content)

url_list = (
    "https://www.bing.com",
    "https://www.jd.com",
    "https://www.sina.com",
    "https://www.baidu.com",
    "https://www.cnblogs.com",
    "https://music.163.com/#"
)

for url in url_list:
    v = pool.submit(task,url)    #獲得一個返回值,其實就是訪問url的響應
    v.add_done_callback(done)

result

響應信息balabalabala   ps:太多就不發了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM