媒介
在當今疾速開展的互聯網時代,高效力的順序履行變得尤為重要。Python作為一種廣泛利用的編程言語,其多線程並發編程功能可能明顯進步順序的履行效力。本文將帶你輕鬆入門Python多線程並發編程,並展示怎樣高效實現。
學前須知
在開端進修之前,你須要具有以下基本:
- Python基本語法
- Python文件操縱
- Python模塊利用
開辟東西
推薦利用PyCharm作為開辟東西,它存在富強的代碼編輯跟調試功能。
課程安排
- 過程實現多任務
- 線程實現多任務
- 多任務利用
一、多任務介紹
1.1 多任務的不雅點
多任務是指在同一時光內履行多個任務。
1.2 多任務的兩種表示情勢
- 並發:在一段時光內交替去履行多個任務。
- 並行:在一段時光內真正的同時一起履行多個任務。
1.3 並發
例子:對單核CPU處理多任務,操縱體系輪番讓各個任務交替履行。
1.4 並行
例子:對多核CPU處理多任務,操縱體系會給CPU的每個內核安排一個履行的任務,多個內核是真正的一起同時履行多個任務。
二、線程的介紹
線程是一個獨破的履行流程,每個線程都有本人的客棧空間跟順序計數器,它們同時運轉,但不一定按照次序履行。
三、多線程實現多任務
3.1 線程的創建步調
import threading
def printtime(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print("%s: %s" % (threadName, time.ctime(time.time())))
try:
thread1 = threading.Thread(target=printtime, args=("Thread-1", 2,))
thread2 = threading.Thread(target=printtime, args=("Thread-2", 4,))
except:
print("Error: 無法啟動線程")
thread1.start()
thread2.start()
thread1.join()
thread2.join()
3.2 線程履行帶有參數的任務
def worker(name, delay):
print(f"線程 {name} 開端")
time.sleep(delay)
print(f"線程 {name} 實現")
thread1 = threading.Thread(target=worker, args=("Thread-1", 2,))
thread2 = threading.Thread(target=worker, args=("Thread-2", 4,))
thread1.start()
thread2.start()
thread1.join()
thread2.join()
3.3 主線程跟子線程的結束次序
- 主線程會等待全部的子線程實現才結束。
- 設置保衛主線程:只有全部保衛線程都結束,全部Python順序才會退出。
四、線程間的履行次序
4.1 線程間的履行是無序的
4.2 例子
import threading
def print_numbers():
for i in range(5):
print("數字", i)
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_numbers)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
五、多線程-案例
5.1 須要分析
編寫一個簡單的網路爬蟲,利用多線程同時爬取多個網頁。
5.2 實現
import threading
import requests
def crawl(url):
response = requests.get(url)
print(f"爬取 {url} 成功")
urls = [
"http://www.example.com",
"http://www.example.org",
"http://www.example.net"
]
threads = []
for url in urls:
thread = threading.Thread(target=crawl, args=(url,))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
六、過程跟線程對比
6.1 關係對比
- 過程是線程的容器。
- 一個過程可能包含多個線程。
6.2 差別對比
- 過程是體系停止資本分配的最小單位,而線程是過程履行順序時的最小調理單位。
- 過程有本人獨破的內存空間,而線程共享過程的內存空間。
6.3 優毛病對比
- 過程:長處是資本獨破,毛病是創建跟切換開支大年夜。
- 線程:長處是創建跟切換開支小,毛病是資本共享,存在競爭成績。
七、總結
經由過程本文的進修,信賴你曾經控制了Python多線程並發編程的基本知識跟技能。在現實利用中,公道應用多線程技巧可能明顯進步順序的履行效力。盼望本文能幫助你輕鬆入門Python多線程並發編程,並在現實中壹直進步本人的技能。