亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python多進程、多線程、協(xié)程典型示例解析(最新推薦)

 更新時間:2025年05月19日 14:25:14   作者:漫談網(wǎng)絡(luò)  
這篇文章主要介紹了Python多進程、多線程、協(xié)程典型示例解析(最新推薦),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、multiprocessing(多進程)

1. 模塊簡介

  • 作用:創(chuàng)建多個獨立運行的進程(每個進程有獨立內(nèi)存空間)
  • 適用場景:數(shù)學計算、圖像處理等CPU密集型任務(wù)
  • 核心原理:繞過Python的GIL鎖,真正利用多核CPU

2. 案例詳解:并行計算平方和

import multiprocessing
import time
# 計算平方的任務(wù)函數(shù)
def calculate_square(number):
    total = 0
    for n in range(number):
        total += n ** 2
    print(f"計算結(jié)果:{total}")
if __name__ == "__main__":  # 必須加這句,否則Windows系統(tǒng)會報錯
    # 創(chuàng)建4個進程
    processes = []
    numbers = [10_000_000, 10_000_000, 10_000_000, 10_000_000]  # 四個大數(shù)
    # 記錄開始時間
    start_time = time.time()
    # 創(chuàng)建并啟動進程
    for num in numbers:
        p = multiprocessing.Process(target=calculate_square, args=(num,))
        processes.append(p)
        p.start()  # 啟動進程(會立即返回,不會等待完成)
    # 等待所有進程完成
    for p in processes:
        p.join()  # 阻塞主進程,直到子進程結(jié)束
    # 計算總耗時
    print(f"總耗時:{time.time() - start_time:.2f}秒")

3. 實現(xiàn)邏輯

主進程(老板)
   │
   ├─ 子進程1(員工1)→ 獨立計算
   ├─ 子進程2(員工2)→ 獨立計算
   ├─ 子進程3(員工3)→ 獨立計算
   └─ 子進程4(員工4)→ 獨立計算

4. 注意事項

  • 進程間不能直接共享變量,需使用QueuePipe通信
  • 每個進程消耗更多內(nèi)存(獨立內(nèi)存空間)
  • 適合處理相互獨立的任務(wù)(如同時處理多個文件)

二、threading(多線程)

1. 模塊簡介

  • 作用:創(chuàng)建多個線程(共享同一進程內(nèi)存)
  • 適用場景:文件讀寫、網(wǎng)絡(luò)請求等I/O等待型任務(wù)
  • 核心特點:受GIL限制,同一時刻只能有一個線程執(zhí)行Python字節(jié)碼

2. 案例詳解:同時下載文件與顯示進度條

import threading
import time
import requests
# 全局變量(線程共享)
download_complete = False
def download_file(url):
    global download_complete
    print("開始下載文件...")
    response = requests.get(url)
    with open("bigfile.iso", "wb") as f:
        f.write(response.content)
    download_complete = True
    print("\n下載完成!")
def show_progress():
    while not download_complete:
        print(".", end="", flush=True)  # 不換行輸出點
        time.sleep(0.5)
if __name__ == "__main__":
    # 創(chuàng)建兩個線程
    download_thread = threading.Thread(
        target=download_file, 
        args=("https://example.com/large-file.iso",)
    )
    progress_thread = threading.Thread(target=show_progress)
    # 啟動線程
    download_thread.start()
    progress_thread.start()
    # 等待下載線程完成
    download_thread.join()
    progress_thread.join()  # 需要手動停止進度條線程

3. 實現(xiàn)邏輯

主線程
   │
   ├─ 下載線程 → 執(zhí)行下載(遇到網(wǎng)絡(luò)等待時,GIL釋放)
   └─ 進度條線程 → 打印進度點

4. 注意事項

  • 共享變量需使用Lock避免數(shù)據(jù)競爭
  • 線程適合需要頻繁共享數(shù)據(jù)的場景(如GUI程序)
  • 不要用多線程做數(shù)學計算(反而會更慢)

三、asyncio(協(xié)程)

1. 模塊簡介

  • 作用:單線程內(nèi)通過任務(wù)切換實現(xiàn)高并發(fā)
  • 適用場景:Web服務(wù)器、高頻I/O操作(如爬蟲)
  • 核心機制:事件循環(huán)(Event Loop)驅(qū)動協(xié)程切換

2. 案例詳解:異步批量請求網(wǎng)頁

import asyncio
import aiohttp  # 需要安裝:pip install aiohttp
async def fetch_page(url):
    async with aiohttp.ClientSession() as session:  # 創(chuàng)建會話
        async with session.get(url) as response:    # 發(fā)起請求
            return await response.text()           # 異步等待響應
async def main():
    urls = [
        "https://www.baidu.com",
        "https://www.taobao.com",
        "https://www.jd.com"
    ]
    # 創(chuàng)建任務(wù)列表
    tasks = [fetch_page(url) for url in urls]
    # 并行執(zhí)行所有任務(wù)
    pages = await asyncio.gather(*tasks)  # 關(guān)鍵點:聚集任務(wù)
    # 輸出結(jié)果
    for url, content in zip(urls, pages):
        print(f"{url} → 長度:{len(content)}")
# 啟動事件循環(huán)
asyncio.run(main())  # Python 3.7+

3. 實現(xiàn)邏輯

事件循環(huán)(總調(diào)度員)
   │
   ├─ 任務(wù)1:請求百度 → 遇到等待 → 掛起
   ├─ 任務(wù)2:請求淘寶 → 遇到等待 → 掛起
   └─ 任務(wù)3:請求京東 → 遇到等待 → 掛起
   
當某個請求返回時,恢復對應任務(wù)執(zhí)行

4. 注意事項

  • 協(xié)程函數(shù)必須用async def定義
  • 阻塞操作必須用await(否則會阻塞整個事件循環(huán))
  • 需要配合異步庫使用(如aiohttp代替requests

三者的核心區(qū)別總結(jié)

特性multiprocessingthreadingasyncio
并行能力真正多核并行偽并行(受GIL限制)單線程并發(fā)
內(nèi)存占用高(獨立內(nèi)存空間)低(共享內(nèi)存)最低
適用場景CPU密集型任務(wù)I/O密集型任務(wù)超高并發(fā)I/O任務(wù)
代碼復雜度中等(需處理進程通信)低(但需處理鎖)高(需理解異步語法)

如何選擇?

  • 需要數(shù)學計算加速 → 選multiprocessing
  • 簡單I/O操作(如文件讀寫) → 選threading
  • 高性能網(wǎng)絡(luò)請求(如爬蟲) → 選asyncio
  • 混合型任務(wù) → 組合使用(如多進程+協(xié)程)

通過這三個案例,可以明顯看出:多進程像多個獨立工廠,多線程像工廠內(nèi)多個協(xié)作工人,協(xié)程則像一個人用超高效的時間管理法。理解這個核心差異后,就能根據(jù)實際需求選擇合適的工具了。

到此這篇關(guān)于Python多進程、多線程、協(xié)程典型示例解析的文章就介紹到這了,更多相關(guān)Python多進程、多線程、協(xié)程典型示例解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python數(shù)據(jù)結(jié)構(gòu)之Array用法實例

    Python數(shù)據(jù)結(jié)構(gòu)之Array用法實例

    這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)之Array用法實例,較為詳細的講述了Array的常見用法,具有很好的參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • python 爬取百度文庫并下載(免費文章限定)

    python 爬取百度文庫并下載(免費文章限定)

    這篇文章主要介紹了python 爬取百度文庫并下載的示例,幫助大家更好的理解和學習python 爬蟲的相關(guān)知識,感興趣的朋友可以了解下
    2020-12-12
  • python教程之用py2exe將PY文件轉(zhuǎn)成EXE文件

    python教程之用py2exe將PY文件轉(zhuǎn)成EXE文件

    py2exe是一個將python腳本轉(zhuǎn)換成windows上的可獨立執(zhí)行的可執(zhí)行程序(*.exe)的工具,這樣,你就可以不用裝python而在windows系統(tǒng)上運行這個可執(zhí)行程序。
    2014-06-06
  • Python HTMLTestRunner可視化報告實現(xiàn)過程解析

    Python HTMLTestRunner可視化報告實現(xiàn)過程解析

    這篇文章主要介紹了Python HTMLTestRunner可視化報告實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • python設(shè)計模式之抽象工廠模式詳解

    python設(shè)計模式之抽象工廠模式詳解

    這篇文章主要介紹了python設(shè)計模式之抽象工廠模式,通過案例分析,主要說明了該項設(shè)計模式的主要解決問題,優(yōu)缺點以及何時使用等,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • PyTorch之關(guān)于hook機制

    PyTorch之關(guān)于hook機制

    這篇文章主要介紹了PyTorch之關(guān)于hook機制的理解,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python rstrip()方法實例詳解

    Python rstrip()方法實例詳解

    這篇文章主要介紹了Python rstrip()方法,包括rstrip方法的語法介紹和參數(shù)類型,需要的朋友可以參考下
    2018-11-11
  • Python 跨文件夾導入自定義包的實現(xiàn)

    Python 跨文件夾導入自定義包的實現(xiàn)

    有時我們自己編寫一些模塊時,跨文件夾調(diào)用會出現(xiàn)ModuleNotFoundError: No module named 'XXX',本文就來介紹一下解決方法,感興趣的可以了解一下
    2023-11-11
  • 解決cupy-cuda安裝下載報錯以及速度太慢的問題

    解決cupy-cuda安裝下載報錯以及速度太慢的問題

    在嘗試下載Cupy-CUDA時可能會遇到報錯"ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.",這通常是由于網(wǎng)絡(luò)問題導致的,出現(xiàn)這種情況時,可以嘗試使用清華大學的鏡像源來加速下載,這樣不僅可以提高下載速度
    2024-09-09
  • python中使用.py配置文件的方法詳解

    python中使用.py配置文件的方法詳解

    這篇文章主要介紹了python中使用.py配置文件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11

最新評論