亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用多線程加速Python代碼

發布時間:2021-09-13 18:21:06 來源:億速云 閱讀:269 作者:小新 欄目:大數據

這篇文章主要介紹如何使用多線程加速Python代碼,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

很多時候,我們大部分使用Python編寫代碼,python因為其簡潔,在一些小功能的開發確實快一些,當我們的代碼執行遠程請求或讀取多個文件或對某些數據進行處理。在很多情況下下,我們大家都是利用循環去讀取,這種方法要花很長時間才能完成執行。

import requests
from time import time

url_list = [
   "https://via.placeholder.com/400",
   "https://via.placeholder.com/410",
   "https://via.placeholder.com/420",
   "https://via.placeholder.com/430",
   "https://via.placeholder.com/440",
   "https://via.placeholder.com/450",
   "https://via.placeholder.com/460",
   "https://via.placeholder.com/470",
   "https://via.placeholder.com/480",
   "https://via.placeholder.com/490",
   "https://via.placeholder.com/500",
   "https://via.placeholder.com/510",
   "https://via.placeholder.com/520",
   "https://via.placeholder.com/530",
]

def download_file(url):
   html = requests.get(url, stream=True)
   return html.status_code

start = time()

for url in url_list:
   print(download_file(url))

print(f'Time taken: {time() - start}')

輸出:

Time taken: 4.128157138824463

        這是很明顯的案例,這段代碼將依次打開每個URL,等待其加載,打印其狀態代碼,然后再移至下一個URL。如果用上面的寫法將十分耗時,這種代碼非常適合用于多線程。

        利用多線程,您可以以非常低的開銷同時執行多個任務。接下來我們去試一下。

        我們使用 current.futures 庫的ThreadPoolExecutor實現多線程。然后我們寫一下多線程代碼,并解釋原理。

import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
from time import time

url_list = [
   "https://via.placeholder.com/400",
   "https://via.placeholder.com/410",
   "https://via.placeholder.com/420",
   "https://via.placeholder.com/430",
   "https://via.placeholder.com/440",
   "https://via.placeholder.com/450",
   "https://via.placeholder.com/460",
   "https://via.placeholder.com/470",
   "https://via.placeholder.com/480",
   "https://via.placeholder.com/490",
   "https://via.placeholder.com/500",
   "https://via.placeholder.com/510",
   "https://via.placeholder.com/520",
   "https://via.placeholder.com/530",
]

def download_file(url):
   html = requests.get(url, stream=True)
   return html.status_code

start = time()

processes = []
with ThreadPoolExecutor(max_workers=10) as executor:
   for url in url_list:
       processes.append(executor.submit(download_file, url))

for task in as_completed(processes):
   print(task.result())


print(f'Time taken: {time() - start}')

輸出:

Time taken: 0.4583399295806885

        代碼處理速度增加了9倍!如果有更多的URL,則性能差異應該更明顯。

        為什么多線程速度那么快。當我們在調用executor.submit時,我們往線程池添加一個新的任務。

        那到底是怎么回事?調用時,executor.submit我們正在向線程池添加新任務。連接其存儲起來,之后我們將便利調用任務,并打印結果。

as_completed方法是用來在一個任務完成后,立即從任務列表拿出一個任務去執行。只有已經執行完成或者被取消,任務才會標記為完成狀態。我們也可以向其傳遞一個超時參數,如果任務花費的時間超過該時間段,則即使也會as_completed切換任務。

以上是“如何使用多線程加速Python代碼”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙胜| 沙河市| 灌阳县| 延安市| 绥江县| 石渠县| 南充市| 苍山县| 正阳县| 漠河县| 报价| 郧西县| 饶河县| 普兰县| 沅江市| 临江市| 怀安县| 宜州市| 蚌埠市| 岫岩| 莱州市| 独山县| 乌鲁木齐市| 义马市| 辽源市| 双流县| 昌黎县| 宜黄县| 镇远县| 托克逊县| 锡林郭勒盟| 信宜市| 青岛市| 新宁县| 双牌县| 保亭| 巧家县| 日喀则市| 温宿县| 高陵县| 旬邑县|