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

Python標(biāo)準(zhǔn)庫之多進程(multiprocessing包)介紹

 更新時間:2014年11月25日 10:27:50   投稿:junjie  
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫之多進程(multiprocessing包)介紹,本文講解了進程池、共享資源、共享內(nèi)存、Manager等內(nèi)容,需要的朋友可以參考下

在初步了解Python多進程之后,我們可以繼續(xù)探索multiprocessing包中更加高級的工具。這些工具可以讓我們更加便利地實現(xiàn)多進程。

進程池

進程池 (Process Pool)可以創(chuàng)建多個進程。這些進程就像是隨時待命的士兵,準(zhǔn)備執(zhí)行任務(wù)(程序)。一個進程池中可以容納多個待命的士兵。

“三個進程的進程池”

比如下面的程序:

復(fù)制代碼 代碼如下:

import multiprocessing as mul
def f(x):
    return x**2
pool = mul.Pool(5)
rel  = pool.map(f,[1,2,3,4,5,6,7,8,9,10])
print(rel)

我們創(chuàng)建了一個容許5個進程的進程池 (Process Pool) 。Pool運行的每個進程都執(zhí)行f()函數(shù)。我們利用map()方法,將f()函數(shù)作用到表的每個元素上。這與built-in的map()函數(shù)類似,只是這里用5個進程并行處理。如果進程運行結(jié)束后,還有需要處理的元素,那么的進程會被用于重新運行f()函數(shù)。除了map()方法外,Pool還有下面的常用方法。

apply_async(func,args)  從進程池中取出一個進程執(zhí)行func,args為func的參數(shù)。它將返回一個AsyncResult的對象,你可以對該對象調(diào)用get()方法以獲得結(jié)果。

close()  進程池不再創(chuàng)建新的進程

join()   wait進程池中的全部進程。必須對Pool先調(diào)用close()方法才能join。

練習(xí)

有下面一個文件download.txt。

復(fù)制代碼 代碼如下:

www.sina.com.cn
www.163.com
www.iciba.com
www.cnblogs.com
www.qq.com
www.douban.com

使用包含3個進程的進程池下載文件中網(wǎng)站的首頁。(你可以使用subprocess調(diào)用wget或者curl等下載工具執(zhí)行具體的下載任務(wù))

共享資源

我們在Python多進程初步已經(jīng)提到,我們應(yīng)該盡量避免多進程共享資源。多進程共享資源必然會帶來進程間相互競爭。而這種競爭又會造成race condition,我們的結(jié)果有可能被競爭的不確定性所影響。但如果需要,我們依然可以通過共享內(nèi)存和Manager對象這么做。

共享“資源”

共享內(nèi)存

在Linux進程間通信中,我們已經(jīng)講述了共享內(nèi)存(shared memory)的原理,這里給出用Python實現(xiàn)的例子:

復(fù)制代碼 代碼如下:

# modified from official documentation
import multiprocessing
def f(n, a):
    n.value   = 3.14
    a[0]      = 5
num   = multiprocessing.Value('d', 0.0)
arr   = multiprocessing.Array('i', range(10))
p = multiprocessing.Process(target=f, args=(num, arr))
p.start()
p.join()
print num.value
print arr[:]

這里我們實際上只有主進程和Process對象代表的進程。我們在主進程的內(nèi)存空間中創(chuàng)建共享的內(nèi)存,也就是Value和Array兩個對象。對象Value被設(shè)置成為雙精度數(shù)(d), 并初始化為0.0。而Array則類似于C中的數(shù)組,有固定的類型(i, 也就是整數(shù))。在Process進程中,我們修改了Value和Array對象?;氐街鞒绦颍蛴〕鼋Y(jié)果,主程序也看到了兩個對象的改變,說明資源確實在兩個進程之間共享。

Manager

Manager對象類似于服務(wù)器與客戶之間的通信 (server-client),與我們在Internet上的活動很類似。我們用一個進程作為服務(wù)器,建立Manager來真正存放資源。其它的進程可以通過參數(shù)傳遞或者根據(jù)地址來訪問Manager,建立連接后,操作服務(wù)器上的資源。在防火墻允許的情況下,我們完全可以將Manager運用于多計算機,從而模仿了一個真實的網(wǎng)絡(luò)情境。下面的例子中,我們對Manager的使用類似于shared memory,但可以共享更豐富的對象類型。

復(fù)制代碼 代碼如下:

import multiprocessing
def f(x, arr, l):
    x.value = 3.14
    arr[0] = 5
    l.append('Hello')
server = multiprocessing.Manager()
x    = server.Value('d', 0.0)
arr  = server.Array('i', range(10))
l    = server.list()
proc = multiprocessing.Process(target=f, args=(x, arr, l))
proc.start()
proc.join()
print(x.value)
print(arr)
print(l)

Manager利用list()方法提供了表的共享方式。實際上你可以利用dict()來共享詞典,Lock()來共享threading.Lock(注意,我們共享的是threading.Lock,而不是進程的mutiprocessing.Lock。后者本身已經(jīng)實現(xiàn)了進程共享)等。 這樣Manager就允許我們共享更多樣的對象。

我們在這里不深入講解Manager在遠(yuǎn)程情況下的應(yīng)用。有機會的話,會在網(wǎng)絡(luò)應(yīng)用中進一步探索。

總結(jié)

Pool
Shared memory, Manager

相關(guān)文章

  • python決策樹之C4.5算法詳解

    python決策樹之C4.5算法詳解

    這篇文章主要為大家詳細(xì)介紹了python決策樹之C4.5算法的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • python線程里哪種模塊比較適合

    python線程里哪種模塊比較適合

    在本篇文章里我們給大家整理了關(guān)于python線程里哪種模塊比較適合的相關(guān)知識點,需要的朋友們可以學(xué)習(xí)下。
    2020-08-08
  • 詳解Python正則表達(dá)式re模塊

    詳解Python正則表達(dá)式re模塊

    這篇文章主要介紹了Python正則表達(dá)式re模塊,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • pycharm實現(xiàn)在子類中添加一個父類沒有的屬性

    pycharm實現(xiàn)在子類中添加一個父類沒有的屬性

    這篇文章主要介紹了pycharm實現(xiàn)在子類中添加一個父類沒有的屬性,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python語法學(xué)習(xí)print中f-string用法示例

    python語法學(xué)習(xí)print中f-string用法示例

    這篇文章主要為大家介紹了python語法學(xué)習(xí)print中f-string用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • python深度學(xué)習(xí)tensorflow入門基礎(chǔ)教程示例

    python深度學(xué)習(xí)tensorflow入門基礎(chǔ)教程示例

    這篇文章主要為大家介紹了python深度學(xué)習(xí)tensorflow入門基礎(chǔ)教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Pandas讀取csv的實現(xiàn)

    Pandas讀取csv的實現(xiàn)

    本文主要介紹了Pandas讀取csv的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • python的繼承詳解

    python的繼承詳解

    這篇文章主要介紹了Python中繼承的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2021-10-10
  • 深人了解Python上下文管理器

    深人了解Python上下文管理器

    這篇文章主要為大家介紹了Python上下文管理器,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • Python如何轉(zhuǎn)換字符串大小寫

    Python如何轉(zhuǎn)換字符串大小寫

    在本篇文章里小編給大家整理的是關(guān)于Python轉(zhuǎn)換字符串大小寫代碼和實例,需要的朋友們可以參考下。
    2020-06-06

最新評論