99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

3天內(nèi)不再提示

Python多進程學習

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-04-26 11:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

要使用 Python 的多進程,我們需要使用內(nèi)置的 multiprocessing 模塊,該模塊提供了創(chuàng)建和管理進程的類和函數(shù),下面是一個簡單的 Python 多進程的例子:

importmultiprocessing

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

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

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

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

importmultiprocessing

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

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

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

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

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

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

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

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

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

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

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

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

importmultiprocessing
importtime

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

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

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

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

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

審核編輯:湯梓紅

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

    關注

    68

    文章

    19863

    瀏覽量

    234400
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11066

    瀏覽量

    216617
  • 函數(shù)
    +關注

    關注

    3

    文章

    4378

    瀏覽量

    64610
  • python
    +關注

    關注

    56

    文章

    4826

    瀏覽量

    86518
  • 多進程
    +關注

    關注

    0

    文章

    14

    瀏覽量

    2689

原文標題:Python多進程學習

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    請問如何在Python中實現(xiàn)多線程與多進程的協(xié)作?

    大家好!我最近在開發(fā)一個Python項目時,需要同時處理多個任務,且每個任務需要不同的計算資源。我想通過多線程和多進程的組合來實現(xiàn)并發(fā),但遇到了一些問題。 具體來說,我有兩個任務,一個是I/O密集型
    發(fā)表于 03-11 06:57

    實驗:編寫多進程程序

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

    labview有多進程嗎?

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

    多線程和多進程的區(qū)別

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

    淺談多進程多線程的選擇

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

    python多線程和多進程對比

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

    進程控制開發(fā)之編寫多進程程序?qū)嶒灲馕?/a>

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

    python多線程與多進程的區(qū)別

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

    如何選好多線程和多進程

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

    使用Python多進程的理由

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

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

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

    shell腳本實現(xiàn)并發(fā)多進程

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

    Linux系統(tǒng)上多線程和多進程的運行效率

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

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

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

    Python中多線程和多進程的區(qū)別

    Python作為一種高級編程語言,提供了多種并發(fā)編程的方式,其中多線程與多進程是最常見的兩種方式之一。在本文中,我們將探討Python中多線程與多進程的概念、區(qū)別以及如何使用線程池與
    的頭像 發(fā)表于 10-23 11:48 ?972次閱讀
    <b class='flag-5'>Python</b>中多線程和<b class='flag-5'>多進程</b>的區(qū)別