精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python多進程學習

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-04-26 11:04 ? 次閱讀

Python 多進程 (Multiprocessing) 是一種同時利用計算機多個處理器核心 (CPU cores) 進行并行處理的技術,它與 Python 的多線程 (Multithreading) 技術不同,因為多線程的并發任務依賴于一個 GIL (Global Interpreter Lock)。在多進程中,每個進程都有自己的解釋器進程,并且可以同時使用多個 CPU 核心,因此在處理計算密集型任務時比多線程更有效。

要使用 Python 的多進程,我們需要使用內置的 multiprocessing 模塊,該模塊提供了創建和管理進程的類和函數,下面是一個簡單的 Python 多進程的例子:

importmultiprocessing

defworker():
 """子進程的工作函數"""
 print("Starting worker")
 # 這里可以放一些耗時的任務
 print("Finished worker")

if__name__=='__main__':
 # 創建一個子進程
 p=multiprocessing.Process(target=worker)
 # 啟動子進程
 p.start()
 # 等待子進程結束
 p.join()
 print("Parent process finished")

在這個例子中,我們定義了一個函數 worker(),這個函數是子進程要執行的任務,我們使用 multiprocessing.Process 類創建了一個子進程,并將 worker() 函數作為參數傳遞給 target 參數,然后我們使用 start() 方法啟動子進程,join() 方法等待子進程完成,最后,主進程會輸出一條消息,表示自己已經完成了。

除了創建單個子進程,我們還可以使用 Pool 類來創建多個子進程,以便并行處理多個任務,下面是一個使用 Pool 類的例子:

importmultiprocessing

defworker(num):
 """子進程的工作函數"""
 print(f"Starting worker {num}")
 # 這里可以放一些耗時的任務
 print(f"Finished worker {num}")

if__name__=='__main__':
 # 創建一個包含 4 個進程的進程池
 withmultiprocessing.Pool(processes=4)aspool:
   # 使用 map 函數并行執行 worker 函數
   pool.map(worker, [1,2,3,4])
 print("Parent process finished")

在這個例子中,我們使用 Pool 類創建了一個包含 4 個進程的進程池,然后我們使用 map() 方法并行執行 worker() 函數。map() 方法會將參數列表中的每個參數依次傳遞給 worker() 函數,并將返回值收集到一個列表中。最后,主進程會輸出一條消息,表示自己已經完成了。

當我們需要執行一些計算密集型的任務時,使用 Python 的多進程技術可以顯著提高程序的執行效率,下面是一些使用 Python 的多進程技術的常見場景:

數據處理:當我們需要處理大量的數據時,可以使用多進程技術將數據分成多個部分,并同時處理它們。

網絡爬蟲:當我們需要爬取大量的網頁時,可以使用多進程技術將不同的任務分配給不同的進程,從而并行地執行它們。

圖像處理:當我們需要對大量的圖像進行處理時,可以使用多進程技術并行執行不同的處理任務。

在使用 Python 的多進程技術時,我們需要注意一些問題:

進程間通信:由于每個進程都有自己的內存空間,因此它們之間不能直接共享數據,我們需要使用 multiprocessing 模塊提供的管道、隊列等機制來實現進程間通信。

進程池:在使用 Pool 類時,我們需要注意控制并發任務的數量,以免占用過多的系統資源。

內存限制:由于每個進程都有自己的內存空間,因此如果同時創建太多的進程,會占用過多的系統內存,導致程序崩潰。

下面是一個使用進程池并行執行任務的例子,其中使用了 imap_unordered() 方法來異步執行任務:

importmultiprocessing
importtime

defsquare(x):
 """計算平方"""
 time.sleep(1) # 模擬耗時的計算
 returnx*x

if__name__=='__main__':
 # 創建進程池
 withmultiprocessing.Pool()aspool:
   # 異步執行任務
   forresultinpool.imap_unordered(square,range(10)):
     print(result)

在這個例子中,我們創建了一個包含默認進程數的進程池,然后使用 imap_unordered() 方法并行執行 square() 函數。imap_unordered() 方法會返回一個迭代器,每次迭代都會返回一個已經完成的任務的結果。由于我們使用了異步執行,因此任務的返回順序不一定與參數的順序相同。

除了使用 imap_unordered() 方法,我們還可以使用 imap() 方法,它會按照參數的順序返回任務的結果,此外,我們還可以使用 apply() 和 apply_async() 方法來執行單個任務或異步執行單個任務。

總的來說,使用 Python 的多進程技術可以幫助我們更有效地處理計算密集型任務,通過使用 multiprocessing 模塊和 Pool 類,我們可以輕松地創建和管理多個子進程,并使它們并行地執行任務。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    18927

    瀏覽量

    227224
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10702

    瀏覽量

    209358
  • 函數
    +關注

    關注

    3

    文章

    4237

    瀏覽量

    61967
  • python
    +關注

    關注

    53

    文章

    4753

    瀏覽量

    84077
  • 多進程
    +關注

    關注

    0

    文章

    13

    瀏覽量

    2603

原文標題:Python多進程學習

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    實驗:編寫多進程程序

    1.實驗目的 通過編寫多進程程序,使讀者熟練掌握fork()、exec()、wait()和waitpid()等函數的使用,進一步理解在Linux中多進程編程的步驟。 2.實驗內容 該實驗有3個進程
    發表于 09-05 15:32

    labview有多進程嗎?

    labview有多進程嗎?
    發表于 02-03 17:13

    多線程和多進程的區別

    6.你的數據庫一會又500個連接數,一會有10個,你分析一下情況7.udp和tcp的區別8.多線程和多進程的區別9.有一臺web服務器,你選擇用多線程還是多進程,...
    發表于 07-19 07:21

    淺談多進程多線程的選擇

    魚還是熊掌:淺談多進程多線程的選擇關于多進程和多線程,教科書上最經典的一句話是“進程是資源分配的最小單位,線程是CPU調度的最小單位”,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇
    發表于 08-24 07:38

    python多線程和多進程對比

    適合在對CPU計算運算要求較高的場景下使用,譬如大數據分析,機器學習多進程雖然總是最快的,但是不一定是最優的選擇,因為它需要CPU資源支持下才能體現優勢
    發表于 03-15 16:42

    進程控制開發之編寫多進程程序實驗解析

    7.4.1 編寫多進程程序 1.實驗目的 通過編寫多進程程序,使讀者熟練掌握fork()、exec()、wait()和waitpid()等函數的使用,進一步理解在Linux中多進程編程的步驟。 2.
    發表于 10-18 16:33 ?0次下載
    <b class='flag-5'>進程</b>控制開發之編寫<b class='flag-5'>多進程</b>程序實驗解析

    python多線程與多進程的區別

    Python的設計哲學是“優雅”、“明確”、“簡單”。因此,Perl語言中“總是有多種方法來做同一件事”的理念在Python開發者中通常是難以忍受的。Python開發者的哲學是“用一種方法,最好是只有一種方法來做一件事”。在設計
    發表于 12-01 09:04 ?6085次閱讀
    <b class='flag-5'>python</b>多線程與<b class='flag-5'>多進程</b>的區別

    異步多進程時間自動機的可覆蓋性問題

    已有的實時系統模型無法動態創建新進程.為此,基于時間自動機模型,提出了異步多進程時間自動機模型,將每個進程抽象為進程時間自動機,其部分狀態能夠觸發新
    發表于 12-29 14:10 ?0次下載

    如何選好多線程和多進程

    關于多進程和多線程,教科書上最經典的一句話是“進程是資源分配的最小單位,線程是CPU調度的最小單位”,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這么簡單了,選的不好,會讓你深受其害。
    的頭像 發表于 05-11 16:16 ?2885次閱讀
    如何選好多線程和<b class='flag-5'>多進程</b>

    使用Python多進程的理由

    Python 是運行在解釋器中的語言,查找資料知道, python 中有一個全局鎖( GI),在使用多進程( Threa)的情況下,不能發揮多核的優勢。而使用多進程( Multipro
    的頭像 發表于 04-04 16:50 ?1509次閱讀
    使用<b class='flag-5'>Python</b><b class='flag-5'>多進程</b>的理由

    淺談Linux網絡編程中的多進程和多線程

    在Linux網絡編程中,我們應該見過很多網絡框架或者server,有多進程的處理方式,也有多線程處理方式,孰好孰壞并沒有可比性,首先選擇多進程還是多線程我們需要考慮業務場景,其次結合當前部署環境,是云原生還是傳統的IDC等,最后考慮可維護性,其具體的對比在第三部分具體會展
    發表于 08-08 16:56 ?719次閱讀
    淺談Linux網絡編程中的<b class='flag-5'>多進程</b>和多線程

    關于Python多進程和多線程詳解

    進程(process)和線程(thread)是操作系統的基本概念,但是它們比較抽象,不容易掌握。關于多進程和多線程,教科書上最經典的一句話是“進程是資源分配的最小單位,線程是CPU調度的最小單位”。
    的頭像 發表于 11-06 14:46 ?687次閱讀
    關于<b class='flag-5'>Python</b><b class='flag-5'>多進程</b>和多線程詳解

    shell腳本實現并發多進程

    在Shell腳本中實現并發多進程可以使用以下方法: 使用符號來將其放入后臺執行,從而實現并發多進程。例如: #!/bin/bash command1 command3 符號,它們將在后臺并發執行
    的頭像 發表于 11-08 10:20 ?1069次閱讀

    Linux系統上多線程和多進程的運行效率

    關于多進程和多線程,教科書上最經典的一句話是“進程是資源分配的最小單位,線程是CPU調度的最小單位”,這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這么簡單了,選的不好,會讓你
    的頭像 發表于 11-10 10:54 ?1059次閱讀
    Linux系統上多線程和<b class='flag-5'>多進程</b>的運行效率

    你還是分不清多進程和多線程嗎?一文搞懂!

    你還是分不清多進程和多線程嗎?一文搞懂! 多進程和多線程是并發編程中常見的兩個概念,它們都可以用于提高程序的性能和效率。但是它們的實現方式和使用場景略有不同。 1. 多進程多進程
    的頭像 發表于 12-19 16:07 ?445次閱讀