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

Python使用多進程執(zhí)行同一個函數(shù)的多種方法

 更新時間:2026年04月15日 09:25:04   作者:獨隅  
本文介紹了在Python中使用多進程執(zhí)行相同函數(shù)的三種方法:Process類、Pool進程池和apply_async異步執(zhí)行,比較了各種方法的適用場景、優(yōu)缺點,并提供了實用技巧和注意事項,推薦使用Pool進程池處理大量任務,它簡單易用且自動負載均衡,需要的朋友可以參考下

在 Python 中,使用多進程執(zhí)行同一個函數(shù)有多種方法,主要可以通過 multiprocessing 模塊實現(xiàn)。以下是幾種常用的方式:

方法一:使用 Process 類創(chuàng)建獨立進程

這種方法適合需要精確控制每個進程的場景。

import multiprocessing
import time

def worker(task_name, duration):
    print(f"進程 {task_name} 開始執(zhí)行,預計耗時 {duration} 秒")
    time.sleep(duration)
    print(f"進程 {task_name} 執(zhí)行完成")
    return f"{task_name} 處理結果"

if __name__ == "__main__":
    processes = []
    tasks = [("任務A", 2), ("任務B", 3), ("任務C", 1)]
    
    # 創(chuàng)建并啟動多個進程
    for name, duration in tasks:
        p = multiprocessing.Process(target=worker, args=(name, duration))
        processes.append(p)
        p.start()
        print(f"已啟動進程: {name}")
    
    # 等待所有進程完成
    for p in processes:
        p.join()
    
    print("所有進程執(zhí)行完畢")

方法二:使用 Pool 進程池(推薦)

進程池更適合處理大量任務,可以自動管理進程的創(chuàng)建和回收。

import multiprocessing
import os

def worker(x):
    print(f"進程 {os.getpid()} 正在處理數(shù)據(jù): {x}")
    result = x * x  # 模擬計算任務
    return result

if __name__ == "__main__":
    # 創(chuàng)建進程池,進程數(shù)通常設為CPU核心數(shù)
    with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool:
        data = [1, 2, 3, 4, 5, 6, 7, 8]
        
        # 方法1: map - 阻塞式,按順序返回結果
        results = pool.map(worker, data)
        print(f"map 結果: {results}")
        
        # 方法2: map_async - 非阻塞式
        async_result = pool.map_async(worker, data)
        results_async = async_result.get()  # 獲取結果時會阻塞
        print(f"map_async 結果: {results_async}")

方法三:使用 apply_async 實現(xiàn)異步執(zhí)行

適合需要更靈活控制任務提交和結果獲取的場景。

import multiprocessing
import time
import random

def worker(task_id):
    sleep_time = random.uniform(0.5, 2.0)
    time.sleep(sleep_time)
    return f"任務{task_id} 完成,耗時{sleep_time:.2f}秒"

if __name__ == "__main__":
    with multiprocessing.Pool(4) as pool:
        # 提交多個異步任務
        async_results = []
        for i in range(6):
            result = pool.apply_async(worker, args=(i,))
            async_results.append(result)
        
        print("所有任務已提交,主進程可繼續(xù)執(zhí)行其他工作...")
        
        # 按完成順序獲取結果(無序)
        for result in async_results:
            print(result.get())  # 阻塞直到有結果可用

方法對比與選擇指南

方法適用場景優(yōu)點缺點
Process進程數(shù)少,需要精細控制控制靈活,可設置不同參數(shù)需要手動管理進程生命周期
Pool.map批量處理相同任務簡單易用,自動負載均衡必須等待所有任務完成
Pool.apply_async異步任務處理非阻塞,效率高結果獲取稍復雜

實用技巧與注意事項

  1. 進程間通信:使用 Queue 進行數(shù)據(jù)傳遞
def worker(queue):
    data = queue.get()
    processed = f"處理后的: {data}"
    queue.put(processed)
  1. 錯誤處理:使用回調函數(shù)處理異常
def error_callback(error):
    print(f"任務執(zhí)行出錯: {error}")

pool.apply_async(worker, args=(data,), error_callback=error_callback)
  1. 性能優(yōu)化:合理設置進程數(shù)和 chunksize
# 根據(jù)任務類型調整參數(shù)
results = pool.map(worker, data, chunksize=len(data)//multiprocessing.cpu_count())

實際應用示例:并行下載任務

import multiprocessing
import requests

def download_url(url):
    try:
        response = requests.get(url, timeout=10)
        return f"{url}: 成功, 大小 {len(response.content)} bytes"
    except Exception as e:
        return f"{url}: 失敗, 錯誤 {str(e)}"

if __name__ == "__main__":
    urls = [
        "https://httpbin.org/delay/1",
        "https://httpbin.org/delay/2", 
        "https://httpbin.org/delay/1"
    ]
    
    with multiprocessing.Pool(3) as pool:
        results = pool.map(download_url, urls)
    
    for result in results:
        print(result)

根據(jù)你的具體需求選擇合適的方案,Pool 進程池 在大多數(shù)情況下都是最實用和高效的選擇。

以上就是Python使用多進程執(zhí)行同一個函數(shù)的多種方法的詳細內(nèi)容,更多關于Python多進程執(zhí)行同一個函數(shù)的資料請關注腳本之家其它相關文章!

相關文章

  • python實現(xiàn)橫向拼接圖片

    python實現(xiàn)橫向拼接圖片

    這篇文章主要為大家詳細介紹了python實現(xiàn)橫向拼接圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 使用python來調用CAN通訊的DLL實現(xiàn)方法

    使用python來調用CAN通訊的DLL實現(xiàn)方法

    今天小編就為大家分享一篇使用python來調用CAN通訊的DLL實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python文件名匹配與文件復制的實現(xiàn)

    Python文件名匹配與文件復制的實現(xiàn)

    這篇文章主要介紹了Python文件名匹配與文件復制的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • python實現(xiàn)簡易學生信息管理系統(tǒng)

    python實現(xiàn)簡易學生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡易學生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 對python中raw_input()和input()的用法詳解

    對python中raw_input()和input()的用法詳解

    下面小編就為大家分享一篇對python中raw_input()和input()的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python將字符串轉變成dict格式的實現(xiàn)

    python將字符串轉變成dict格式的實現(xiàn)

    這篇文章主要介紹了python將字符串轉變成dict格式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Flask 數(shù)據(jù)庫集成的介紹

    Flask 數(shù)據(jù)庫集成的介紹

    這篇文章主要給大家分享了Flask 數(shù)據(jù)庫集成的介紹,數(shù)據(jù)庫是大多數(shù) Web 應用的基礎設施,只要想把數(shù)據(jù)存儲下來,就離不開數(shù)據(jù)庫,下面將一起學習一下如何給 Flask 應用添加數(shù)據(jù)庫支持。下面詳細內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Python使用Matplotlib繪制專業(yè)柱狀圖的完整指南

    Python使用Matplotlib繪制專業(yè)柱狀圖的完整指南

    柱狀圖是數(shù)據(jù)可視化中最常用的圖表類型之一,用于展示分類數(shù)據(jù)的數(shù)值比較,Python的Matplotlib庫提供了強大的柱狀圖繪制功能,下面我們將一步步學習如何創(chuàng)建專業(yè)級的柱狀圖,感興趣的小伙伴跟著小編一起來看看吧
    2025-07-07
  • python 判斷文件還是文件夾的簡單實例

    python 判斷文件還是文件夾的簡單實例

    今天小編就為大家分享一篇python 判斷文件還是文件夾的簡單實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python_tkinter彈出對話框創(chuàng)建2

    python_tkinter彈出對話框創(chuàng)建2

    這篇文章主要介紹了python_tkinter彈出對話框創(chuàng)建,上以篇文章我們簡單的對對話框創(chuàng)建做了簡單介紹,本文將繼續(xù)更多相關內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03

最新評論

富顺县| 邢台市| 类乌齐县| 凤山市| 贵州省| 邵阳市| 财经| 临颍县| 台安县| 内乡县| 贵定县| 崇信县| 新巴尔虎右旗| 西安市| 特克斯县| 海伦市| 太仆寺旗| 黄浦区| 闵行区| 青铜峡市| 武清区| 平陆县| 临夏县| 黔江区| 东明县| 沽源县| 易门县| 红安县| 横峰县| 巴林右旗| 阿瓦提县| 赫章县| 萍乡市| 深水埗区| 永德县| 富顺县| 大名县| 怀宁县| 贡觉县| 五家渠市| 左权县|