91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何使用多線程加速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

资源县| 定陶县| 许昌县| 鄂伦春自治旗| 张掖市| 江口县| 石首市| 泗阳县| 正定县| 赤水市| 遂川县| 华宁县| 珲春市| 娱乐| 耒阳市| 三江| 涟水县| 桑植县| 天全县| 略阳县| 尼勒克县| 金山区| 鹤壁市| 湖北省| 加查县| 怀柔区| 长治市| 宁阳县| 金湖县| 泰兴市| 吉木萨尔县| 宁武县| 德令哈市| 武强县| 航空| 留坝县| 剑河县| 三门峡市| 新巴尔虎左旗| 南丰县| 乌兰浩特市|