初學者看過來:Python中多執行緒和多處理的指南
使用Python分析資料,如果使用了正確的資料結構和演算法,有時可以大量提高程式的速度。實現此目的的一種方法是使用Muiltithreading(多執行緒)或Multiprocessing(多重處理)。 |
使用Python分析資料,如果使用了正確的資料結構和演算法,有時可以大量提高程式的速度。實現此目的的一種方法是使用Muiltithreading(多執行緒)或Multiprocessing(多重處理)。
在這篇文章中,我們不會詳細討論多執行緒或多處理的內部原理。相反,我們舉一個例子,編寫一個小的Python 從Unsplash下載影像。我們將從一次下載一個影像的版本開始。接下來,我們使用執行緒來提高執行速度。
Python中多執行緒和多處理的初學者指南
多執行緒
簡單地說,執行緒允許您並行地執行程式。花費大量時間等待外部事件的任務通常適合執行緒化。它們也稱為I/O Bound任務例如從檔案中讀寫,網路操作或使用API線上下載。讓我們來看一個示例,它展示了使用執行緒的好處。
1. 沒有執行緒
在本例中,我們希望透過順序執行程式來檢視從Unsplash API下載15張影像需要多長時間:
import requests import time img_urls = [ 'https://images.unsplash.com/photo-1516117172878-fd2c41f4a759', 'https://images.unsplash.com/photo-1532009324734-20a7a5813719', 'https://images.unsplash.com/photo-1524429656589-6633a470097c', 'https://images.unsplash.com/photo-1530224264768-7ff8c1789d79', 'https://images.unsplash.com/photo-1564135624576-c5c88640f235', 'https://images.unsplash.com/photo-1541698444083-023c97d3f4b6', 'https://images.unsplash.com/photo-1522364723953-452d3431c267', 'https://images.unsplash.com/photo-1513938709626-033611b8cc03', 'https://images.unsplash.com/photo-1507143550189-fed454f93097', 'https://images.unsplash.com/photo-1493976040374-85c8e12f0c0e', 'https://images.unsplash.com/photo-1504198453319-5ce911bafcde', 'https://images.unsplash.com/photo-1530122037265-a5f1f91d3b99', 'https://images.unsplash.com/photo-1516972810927-80185027ca84', 'https://images.unsplash.com/photo-1550439062-609e1531270e', 'https://images.unsplash.com/photo-1549692520-acc6669e2f0c' ] start = time.perf_counter() #start timer for img_url in img_urls: img_name = img_url.split('/')[3] #get image name from url img_bytes = requests.get(img_url).content with open(img_name, 'wb') as img_file: img_file.write(img_bytes) #save image to disk finish = time.perf_counter() #end timer print(f"Finished in {round(finish-start,2)} seconds") #results Finished in 23.101926751 seconds
一共用時23秒。
2. 多執行緒
讓我們看看Pyhton中的執行緒模組如何顯著地改進我們的程式執行:
import time from concurrent.futures import ThreadPoolExecutor def download_images(url): img_name = img_url.split('/')[3] img_bytes = requests.get(img_url).content with open(img_name, 'wb') as img_file: img_file.write(img_bytes) print(f"{img_name} was downloaded") start = time.perf_counter() #start timer with ThreadPoolExecutor() as executor: results = executor.map(download_images,img_urls) #this is Similar to map(func, *iterables) finish = time.perf_counter() #end timer print(f"Finished in {round(finish-start,2)} seconds") #results Finished in 5.544147536 seconds
我們可以看到,與不使用執行緒程式碼相比,使用執行緒程式碼可以顯著提高速度。從23秒到5秒。
對於本例,請注意在建立執行緒時存在開銷,因此將執行緒用於多個API呼叫是有意義的,而不僅僅是單個呼叫。
此外,對於密集的計算,如資料處理,影像處理多處理比執行緒執行得更好。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2692251/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python 多程式和多執行緒學習Python執行緒
- Python的多程式和多執行緒Python執行緒
- python中多執行緒和多程序的應用Python執行緒
- Python中的多工:多執行緒Python執行緒
- 多工處理方式之二:多執行緒執行緒
- Spring Batch中透過多執行緒和非同步處理提高效能SpringBAT執行緒非同步
- 多執行緒和多執行緒同步執行緒
- Spring多執行緒事務處理Spring執行緒
- 前端多執行緒處理——async/await前端執行緒AI
- Python 多執行緒多程式Python執行緒
- python多執行緒中:如何關閉執行緒?Python執行緒
- 3種方式實現python多執行緒併發處理Python執行緒
- 多執行緒理論執行緒
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- 大郎!快起來看多執行緒啦!執行緒
- python中多執行緒消費者生產者問題Python執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- [譯] Python 的多執行緒與多程式Python執行緒
- python多程式取代多執行緒的探究Python執行緒
- python中的socket+threading多執行緒Pythonthread執行緒
- Android中的多程式、多執行緒Android執行緒
- Python學習筆記 - 多執行緒Python筆記執行緒
- Java多執行緒並行處理任務的實現Java執行緒並行
- python多執行緒+生產者和消費者模型+queue使用Python執行緒模型
- 是兄弟!就來看這篇多執行緒!叄執行緒
- 入門python多執行緒/多程式Python執行緒
- Java中的多執行緒Java執行緒
- JSRE中的多工與多執行緒JS執行緒
- Python通過代理多執行緒抓取圖片Python執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- Python 多執行緒及程式Python執行緒
- python3 多執行緒Python執行緒
- 04.python-多執行緒Python執行緒
- python--多工執行緒Python執行緒
- python多執行緒基礎Python執行緒
- python有多執行緒嗎Python執行緒
- 多執行緒的同步和非同步學習執行緒非同步