1. 程式人生 > >Python多程序併發(multiprocessing)用法例項詳解

Python多程序併發(multiprocessing)用法例項詳解

python多執行緒的限制

python多執行緒有個討厭的限制,全域性直譯器鎖(global interpreter lock),這個鎖的意思是任一時間只能有一個執行緒使用直譯器,跟單cpu跑多個程式一個意思,大家都是輪著用的,這叫“併發”,不是“並行”。手冊上的解釋是為了保證物件模型的正確性!這個鎖造成的困擾是如果有一個計算密集型的執行緒佔著cpu,其他的執行緒都得等著....,試想你的多個執行緒中有這麼一個執行緒,得多悲劇,多執行緒生生被搞成序列;當然這個模組也不是毫無用處,手冊上又說了:當用於IO密集型任務時,IO期間執行緒會釋放直譯器,這樣別的執行緒就有機會使用直譯器了!所以是否使用這個模組需要考慮面對的任務型別。

Python多程序併發(multiprocessing)用法   multiprocessing模組程序操作的相關技巧 

例項講述了Python多程序併發(multiprocessing)用法。分享給大家供大家參考。具體分析如下:

由於Python設計的限制(我說的是咱們常用的CPython)。最多隻能用滿1個CPU核心。
Python提供了非常好用的多程序包multiprocessing,你只需要定義一個函式,Python會替你完成其他所有事情。藉助這個包,可以輕鬆完成從單程序到併發執行的轉換。

1、新建單一程序

如果我們新建少量程序,可以如下:

?
1234567891011import multiprocessing
import timedef func(msg):for i in xrange(3):print msgtime.sleep(1)if __name__ == "__main__":p = multiprocessing.Process(target=func, args=("hello", ))p.start()p.join()print "Sub-process done."

2、使用程序池

Pool類可以提供指定數量的程序供使用者呼叫,當有新的請求提交到Pool中時,如果池還沒有滿,就會建立一個新的程序來執行請求。如果池滿,請求就會告知先等待,直到池中有程序結束,才會建立新的程序來執行這些請求。 


它可以讓你跑滿多核CPU,而且使用方法非常簡單。

注意要用apply_async,如果落下async,就變成阻塞版本了。

processes=4是最多併發程序數量。

?
1234567891011121314import multiprocessingimport timedef func(msg):for i in xrange(3):print msgtime.sleep(1)if __name__ == "__main__":pool = multiprocessing.Pool(processes=4)for i in xrange(10):msg = "hello %d" %(i)pool.apply_async(func, (msg, ))pool.close()pool.join()print "Sub-process(es) done."

3、使用Pool,並需要關注結果

更多的時候,我們不僅需要多程序執行,還需要關注每個程序的執行結果,如下:

?
123456789101112131415161718import multiprocessingimport timedef func(msg):for i in xrange(3):print msgtime.sleep(1)return "done " + msgif __name__ == "__main__":pool

相關推薦

Python程序併發(multiprocessing)用法例項

python多執行緒的限制python多執行緒有個討厭的限制,全域性直譯器鎖(global interpreter lock),這個鎖的意思是任一時間只能有一個執行緒使用直譯器,跟單cpu跑多個程式一個意思,大家都是輪著用的,這叫“併發”,不是“並行”。手冊上的解釋是為了保證

Python程序 併發 multiprocessing

庫:multipprocessing 例項: #!/usr/bin/env python # -*- coding:utf-8 -*- import multiprocessing import time def action(sub_process_name): f

Python程序併發(multiprocessing)

由於Python下呼叫Linux的Shell命令都需要等待返回,所以常常我們設定的多執行緒都達不到效果, 因此在呼叫shell命令不需要返回時,使用threading模組並不是最好的方法。 Python提供了非常好用的多程序包multipro

python程序併發multiprocessing

multiprocessing.Process multiprocessing包是Python中的多程序管理包。它與 threading.Thread類似,可以利用multiprocessing.Process物件來建立一個程序。該程序可以允許放在Python

Python程序併發操作程序池Pool

目錄: multiprocessing模組 Pool類 apply apply_async map close terminate join 程序例項 multiprocessing模組 如果你打算編寫多程序的服務程式,Unix/

Python程序multiprocessing模組和程序池的實現

1、利用multiprocessing可以在主程序中建立子程序,提升效率,下面是multiprocessing建立程序的簡單例子,和多執行緒的使用非常相似 ?

python 程序併發執行緒併發總結

本文對python支援的幾種併發方式進行簡單的總結。 Python支援的併發分為多執行緒併發與多程序併發(非同步IO本文不涉及)。概念上來說,多程序併發即執行多個獨立的程式,優勢在於併發處理的任務都由作業系統管理,不足之處在於程式與各程序之間的通訊和資料共享不

Python程序multiprocessing)學習總結

    RawArray(typecode_or_type, size_or_initializer)         Returns a shared array返回一個共享佇列      RawValue(typecode_or_type, *args)         Returns a shared

Python程序併發操作中程序池Pool的應用

     在利用Python進行系統管理的時候,特別是同時操作多個檔案目錄,或者遠端控制多臺主機,並行操作可以節約 大量的時間。當被操作物件數目不大時,可以直接利用multiprocessing中的Process動態成生多個程序,10幾個 還好,但如果是上百個,上千個目標,

python程序併發中,解決資料共享問題Value+Array

參考文章:http://www.jb51.net/article/57666.htm之前多執行緒執行的時候,全部用的全域性變數,程式碼如下:#!/usr/bin/env python #encoding: utf-8 import requestSender as AB i

PythonPython程序multiprocessing程序池Pool的返回值順序

問題起因最近要將一個文字分割成好幾個topic,每個topic設計一個regressor,各regressor是相互獨立的,最後彙總所有topic的regressor得到總得預測結果。沒錯!類似bagging ensemble!只是我沒有抽樣。文字不大,大概3000行,top

python程序利用Multiprocessing執行程式

Process類 Process 類用來描述一個程序物件。建立子程序的時候,只需要傳入一個執行函式和函式的引數即可完成 Process 示例的建立。 star() 方法啟動程序, join() 方法實現程序間的同步,等待所有程序退出才執行下面的程式

Python程序模組multiprocessing

概述:   Python中的多程序由multiprocessing模組提供,multiprocessing模組中通過Process和Pool兩個類提供多程序服務,除了這兩個類以外,還提供了程序鎖(RLock,Lock,Event,Condition和 Semaphore)和

Python程序multiprocessing)一

目錄 簡介 多程序相對於多執行緒可以更好的使用多核,避開GIL(Global Interpreter Lock)的影響。而且多程序引入了程序池的概念,可以更好的並行處理不同輸入的資料。 Process 類 在多程序中,通過建立Process

javascript中this用法例項

JavaScript中的this含義非常豐富,它可以是全域性物件,當前物件或者是任意物件,這都取決於函式的呼叫方式。函式有以下幾種呼叫方式:作為物件方法呼叫、作為函式呼叫、作為建構函式呼叫、apply或call呼叫。 物件方法呼叫 作為物件方法呼叫的時候,this會被繫結到該物件。 ?

js事件監聽器用法例項

本文例項講述了js事件監聽器用法。分享給大家供大家參考。具體分析如下: 1、當同一個物件使用.onclick的寫法觸發多個方法的時候,後一個方法會把前一個方法覆蓋掉,也就是說,在物件的onclick事件發生時,只會執行最後繫結的方法。而用事件監聽則不會有覆蓋的現象,每個繫結的事件都會被執行。

vue 元件高階用法例項

  一、遞迴元件    元件在它的模板內可以遞迴地呼叫自己, 只要給元件設定name 的選項就可以了。    示例如下:    <div id="app19">    <my-component19 :count="1"></my-component19>    </

#Python中字串的處理方法例項

字串的處理方法 1.eval(str) 功能:將字串str當成有效的表示式來求值並返回計算結果。 num1 = eval("123.1") print(num1) #(輸出)123.1 print(type(num1)) #(輸出)<class

python3程序多種使用情況下

序言 最近在寫一個專案,需要使用到多程序。由於整個網路伺服器由自己開發,並沒有使用模組,所以在多程序上面越用越多的疑惑。經過一系列的測試,對整個python多程序有了更多的認識。 最大體會 每當使用multiprocessing建立新的程序,會複製主程序的所有狀態和引數。所以此時

MySQL欄位自增長AUTO_INCREMENT用法例項

之前有碰到過開發同事指出一張InnoDB表的自增列 AUTO_INCREMENT 值莫明的變大,由於這張表是通過mysqldump匯出匯入的。 問題排查: 1、首先,查看錶表義的sql部分的 auto_increment 值部分是正常,所以排除是匯入表問題所引起的;2、最後,經過溝通了解懷疑是插入時