python并行函數(shù) python并行執(zhí)行shell命令

python--并行計(jì)算

python能夠應(yīng)用并行計(jì)算的模塊有多個(gè)multiprocessing、pathos等。其中multiprocessing模塊應(yīng)用的較多,但對(duì)于數(shù)據(jù)挖掘場(chǎng)景來說,pathos模塊更實(shí)用,尤其允許輸入多個(gè)可變參數(shù)非常簡(jiǎn)單實(shí)用。

定制制作可以根據(jù)自己的需求進(jìn)行定制,網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)構(gòu)思過程中功能建設(shè)理應(yīng)排到主要部位公司網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)的運(yùn)用實(shí)際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實(shí)際意義

本文總結(jié)整理了常見的并行計(jì)算場(chǎng)景,編寫parallel.py模塊,主要利用pathos模塊實(shí)現(xiàn),可以實(shí)現(xiàn)單變量并行、多變量并行、并行嵌套等功能。通過tdqm模塊增加了進(jìn)度條,可以顯示計(jì)算進(jìn)度等信息,通過functools模塊中的partial函數(shù)將靜態(tài)參數(shù)凍結(jié),以適應(yīng)并行框架。

parallel.py

函數(shù)parallel的參數(shù)定義順序需要注意: 必選參數(shù)--任意位置參數(shù)--默認(rèn)參數(shù)--任意關(guān)鍵字參數(shù) 。

定義另一個(gè)parallel_main.py模塊,用來展示各個(gè)場(chǎng)景下并行計(jì)算結(jié)果。

parallel_main.py

parallel函數(shù)使用注意點(diǎn):

怎么讓 python 多路并行執(zhí)行

Python中使用線程有兩種方式:函數(shù)或者用類來包裝線程對(duì)象。函數(shù)式:調(diào)用thread模塊中的start_new_thread()函數(shù)來產(chǎn)生新線程。線程模塊:Python通過兩個(gè)標(biāo)準(zhǔn)庫thread和threading提供對(duì)線程的支持。

昆明java培訓(xùn)學(xué)校告訴你python編程開發(fā)關(guān)于程序擴(kuò)展操作?

隨著互聯(lián)網(wǎng)的不斷發(fā)展,我們對(duì)python編程開發(fā)技術(shù)的學(xué)習(xí)和掌握程度也在不斷的提高。下面我們就通過案例分析來了解和學(xué)習(xí)一下,關(guān)于程序擴(kuò)展都有哪些操作方法。

必要的概念傳統(tǒng)編程依賴于兩個(gè)核心概念:函數(shù)和類。使用這些構(gòu)建塊就可以構(gòu)建出無數(shù)的應(yīng)用程序。但是,當(dāng)我們將應(yīng)用程序遷移到分布式環(huán)境時(shí),這些概念通常會(huì)發(fā)生變化。一方面,OpenMPI、Python多進(jìn)程和ZeroMQ等工具提供了用于發(fā)送和接收消息的低級(jí)原語。這些工具非常強(qiáng)大,但它們提供了不同的抽象,因此要使用它們就必須從頭開始重寫單線程應(yīng)用程序。另一方面,我們也有一些特定領(lǐng)域的工具,例如用于模型訓(xùn)練的TensorFlow、用于數(shù)據(jù)處理且支持SQL的Spark,以及用于流式處理的Flink。這些工具提供了更高級(jí)別的抽象,如神經(jīng)網(wǎng)絡(luò)、數(shù)據(jù)集和流。但是,因?yàn)樗鼈兣c用于串行編程的抽象不同,所以要使用它們也必須從頭開始重寫應(yīng)用程序。用于分布式計(jì)算的工具Ray占據(jù)了一個(gè)獨(dú)特的中間地帶。它并沒有引入新的概念,而是采用了函數(shù)和類的概念,并將它們轉(zhuǎn)換為分布式的任務(wù)和actor。Ray可以在不做出重大修改的情況下對(duì)串行應(yīng)用程序進(jìn)行并行化。

開始使用Ray

ray.init()命令將啟動(dòng)所有相關(guān)的Ray進(jìn)程。在切換到集群時(shí),這是需要更改的行(我們需要傳入集群地址)。java課程培訓(xùn)機(jī)構(gòu)發(fā)現(xiàn)這些過程包括:

有很多worker進(jìn)程并行執(zhí)行Python函數(shù)(大概是每個(gè)CPU核心對(duì)應(yīng)一個(gè)worker)。用于將“任務(wù)”分配給worker(以及其他計(jì)算機(jī))的調(diào)度程序進(jìn)程。任務(wù)是Ray調(diào)度的工作單元,對(duì)應(yīng)于一個(gè)函數(shù)調(diào)用或方法調(diào)用。

Python多進(jìn)程multiprocessing模塊介紹

multiprocessing 是一個(gè)支持使用與 threading 模塊類似的 API 來產(chǎn)生進(jìn)程的包。 multiprocessing 包同時(shí)提供了本地和遠(yuǎn)程并發(fā)操作,通過使用子進(jìn)程而非線程有效地繞過了 全局解釋器鎖。 因此,multiprocessing 模塊允許程序員充分利用給定機(jī)器上的多個(gè)處理器。 它在 Unix 和 Windows 上均可運(yùn)行。

1、multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

2、相關(guān)方法

輸出結(jié)果如下:

Pool提供了一種快捷的方法,賦予函數(shù)并行化處理一系列輸入值的能力,可以將輸入數(shù)據(jù)分配給不同進(jìn)程處理(數(shù)據(jù)并行)。下面的例子演示了在模塊中定義此類函數(shù)的常見做法,以便子進(jìn)程可以成功導(dǎo)入該模塊。這個(gè)數(shù)據(jù)并行的基本例子使用了 Pool 。

將在標(biāo)準(zhǔn)輸出中打印

其中:

(1)p.apply(func [, args [, kwargs]]):在一個(gè)池工作進(jìn)程中執(zhí)行func( args, kwargs),然后返回結(jié)果。需要強(qiáng)調(diào)的是:此操作并不會(huì)在所有池工作進(jìn)程中并執(zhí)行func函數(shù)。如果要通過不同參數(shù)并發(fā)地執(zhí)行func函數(shù),必須從不同線程調(diào)用p.apply()函數(shù)或者使用p.apply_async()

(2)p.apply_async(func [, args [, kwargs]]):在一個(gè)池工作進(jìn)程中執(zhí)行func( args,**kwargs),然后返回結(jié)果。此方法的結(jié)果是 AsyncResult類的實(shí)例,callback是可調(diào)用對(duì)象,接收輸入?yún)?shù)。當(dāng)func的結(jié)果變?yōu)榭捎脮r(shí),將理解傳遞給callback。callback禁止執(zhí)行任何阻塞操作,否則將接收其他異步操作中的結(jié)果。多進(jìn)程并發(fā)!

(3)p.close():關(guān)閉進(jìn)程池,防止進(jìn)一步操作。如果所有操作持續(xù)掛起,它們將在工作進(jìn)程終止前完成

(4)p.jion():等待所有工作進(jìn)程退出。此方法只能在close()或teminate()之后調(diào)用

文章題目:python并行函數(shù) python并行執(zhí)行shell命令
本文來源:http://muchs.cn/article12/doscpdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、虛擬主機(jī)、靜態(tài)網(wǎng)站網(wǎng)站維護(hù)、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)