最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、multiprocessing(多進程)

1. 模塊簡介

  • 作用:創(chuàng)建多個獨立運行的進程(每個進程有獨立內(nèi)存空間)
  • 適用場景:數(shù)學(xué)計算、圖像處理等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ù)學(xué)計算(反而會更慢)

三、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()           # 異步等待響應(yīng)
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:請求京東 → 遇到等待 → 掛起
   
當某個請求返回時,恢復(fù)對應(yīng)任務(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ù)
代碼復(fù)雜度中等(需處理進程通信)低(但需處理鎖)高(需理解異步語法)

如何選擇?

  • 需要數(shù)學(xué)計算加速 → 選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幫你操作壓縮包

    無需壓縮軟件,用python幫你操作壓縮包

    這篇文章主要介紹了如何用python幫你操作壓縮包,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-08-08
  • Python實現(xiàn)破解12306圖片驗證碼的方法分析

    Python實現(xiàn)破解12306圖片驗證碼的方法分析

    這篇文章主要介紹了Python實現(xiàn)破解12306圖片驗證碼的方法,涉及Python圖片截取、調(diào)用百度識圖及正則截取等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Python實現(xiàn)模擬登錄及表單提交的方法

    Python實現(xiàn)模擬登錄及表單提交的方法

    這篇文章主要介紹了Python實現(xiàn)模擬登錄及表單提交的方法,涉及Python正則匹配、cookie及URL操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 簡單介紹Python的Django框架的dj-scaffold項目

    簡單介紹Python的Django框架的dj-scaffold項目

    這篇文章主要介紹了簡單介紹Python的Django框架的dj-scaffold項目,用于輔助Django框架的目錄設(shè)置,需要的朋友可以參考下
    2015-05-05
  • Python中列表和元組的相關(guān)語句和方法講解

    Python中列表和元組的相關(guān)語句和方法講解

    這篇文章主要介紹了Python中列表和元組的相關(guān)語句和方法講解,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • python之如何實現(xiàn)延遲操作

    python之如何實現(xiàn)延遲操作

    這篇文章主要介紹了python之如何實現(xiàn)延遲操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Flask后臺線程中的請求上下文問題分析與解決方案

    Flask后臺線程中的請求上下文問題分析與解決方案

    在Flask開發(fā)中,我們經(jīng)常會遇到需要在后臺線程中執(zhí)行耗時操作的情況,然而,如果在后臺線程中直接訪問Flask的request對象,就會遇到RuntimeError: Working outside of request context錯誤,所以本文將通過一個實際案例,分析錯誤原因,并提供3種解決方案
    2025-05-05
  • 利用python編寫一個圖片主色轉(zhuǎn)換的腳本

    利用python編寫一個圖片主色轉(zhuǎn)換的腳本

    這篇文章主要給大家介紹了關(guān)于利用python編寫一個圖片主色轉(zhuǎn)換腳本的相關(guān)資料,主要使用的是Python中的Pillow圖像處理庫,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-12-12
  • 淺談Python的條件判斷語句if/else語句

    淺談Python的條件判斷語句if/else語句

    這篇文章主要介紹了Python的條件判斷語句if/else語句,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python高溫預(yù)警數(shù)據(jù)獲取實例

    python高溫預(yù)警數(shù)據(jù)獲取實例

    這篇文章主要為大家介紹了利用python獲取高溫數(shù)據(jù)進行高溫預(yù)警的防護措施,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07

最新評論

平舆县| 彰武县| 耒阳市| 保定市| 绥德县| 无极县| 泉州市| 钟山县| 舟山市| 裕民县| 宾川县| 临沂市| 祁东县| 峡江县| 商都县| 临城县| 大冶市| 正安县| 彝良县| 肇州县| 霍邱县| 广水市| 舞阳县| 库伦旗| 峨边| 承德市| 清水县| 晋州市| 白河县| 金阳县| 东源县| 山东| 玛纳斯县| 双城市| 通道| 夹江县| 十堰市| 陇南市| 登封市| 桐梓县| 玉树县|