最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python獲取多進(jìn)程執(zhí)行的返回值實(shí)現(xiàn)

 更新時(shí)間:2023年03月06日 09:30:50   作者:執(zhí)假以為真  
本文主要介紹了Python獲取多進(jìn)程執(zhí)行的返回值實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

眾所周知,因?yàn)镚IL的原因,Python至今不支持真正的多線程。為了達(dá)到并行運(yùn)行的目的,我們往往就需要運(yùn)行多進(jìn)程了。
一個(gè)任務(wù)由一個(gè)進(jìn)程來(lái)運(yùn)行,可是它的結(jié)果怎么來(lái)獲取呢?

方法-1.

第一種方法是記錄在全局變量中。當(dāng)然這時(shí)候要注意可能會(huì)需要用到Lock. 下面是一個(gè)例子。

Program-1

import multiprocessing
from multiprocessing import Pool


info_manager = multiprocessing.Manager()
info_lock = info_manager.Lock()
info_dict = info_manager.dict()


def add(n):
? ? global info_dict, info_lock?
? ??
? ? s = 0
? ? for i in range(n+1):
? ? ? ? s += i
? ??
? ? info_lock.acquire()
? ? info_dict[n] = s
? ? info_lock.release()
? ??
? ? print("In task %d: %d -> %d" % (n, n, s))


def calculate():
? ? pool = Pool(processes=4)?

? ? tasks = range(10)
? ? for n in tasks:
? ? ? ? pool.apply_async(add, (n,))
? ? ? ??
? ? pool.close()
? ? pool.join()
? ??
? ??
def print_result():
? ? global info_dict
? ??
? ? key_list = sorted(info_dict.keys())
? ??
? ? for key in key_list:
? ? ? ? print("%s: %s" % (key, info_dict[key]))?
? ??
? ??
if __name__ == '__main__':
? ? calculate()
? ? print_result()

除了使用全局變量,還有沒有其他的方法呢?畢竟全局變量似乎看起來(lái)有點(diǎn)危險(xiǎn),不小心就會(huì)被弄壞。

方法-2.

第二種方法,就是記錄下multiprocessing.Pool.apply_async的返回值(假設(shè)稱之為result),然后在Pool被join之后,利用result.get()方法來(lái)得到原任務(wù)函數(shù)的返回值。在這里,multiprocessing.Pool.apply_async的返回值的類型是multiprocessing.pool.ApplyResult,其get()方法會(huì)返回原任務(wù)函數(shù)的返回值。

下面是把上面的那個(gè)例子重新寫一遍。

Program-2

import multiprocessing
from multiprocessing import Pool

def add(n):
? ? s = 0
? ? for i in range(n+1):
? ? ? ? s += i
? ? return (n, s)


def calculate():
? ? pool = Pool(processes=4)

? ? tasks = range(10)
? ? result_list = list()
? ? info_dict = dict()
? ??
? ? for n in tasks:
? ? ? ? result_list.append(pool.apply_async(add, (n,)))
? ? ? ??
? ? pool.close()
? ? pool.join()
? ??
? ? for result in result_list:
? ? ? ? k, v = result.get()
? ? ? ? info_dict[k] = v
? ? ? ??
? ? return info_dict
? ??
? ??
def print_result():
? ? info_dict = calculate()
? ??
? ? key_list = sorted(info_dict.keys())
? ??
? ? for key in key_list:
? ? ? ? print("%s: %s" % (key, info_dict[key]))?
? ??
? ??
if __name__ == '__main__':
? ? calculate()
? ? print_result()

另外,其實(shí)也可以不用等到 Pool join 之后才能調(diào)get(). 可以立刻調(diào)用get(), 但這可能會(huì)造成阻塞。
而get()函數(shù)其實(shí)有一個(gè)參數(shù),可以指定超時(shí)時(shí)間以免無(wú)限等下去,如,result.get(timeout=2), 就是設(shè)置超時(shí)為2秒。

其定義在Python3中如下:

get([timeout])
    Return the result when it arrives. 
    If timeout is not None and the result does not arrive within timeout seconds 
    then multiprocessing.TimeoutError is raised. 
    If the remote call raised an exception then that exception will be reraised by get().

也就是說,如果超時(shí)了,就會(huì)拋出一個(gè)multiprocessing.TimeoutError異常;
而如果該任務(wù)進(jìn)程內(nèi)拋了異常,也會(huì)被get()重新拋出來(lái)。

本文程序通過Python2和Python3的測(cè)試。

到此這篇關(guān)于Python獲取多進(jìn)程執(zhí)行的返回值實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python獲取多進(jìn)程執(zhí)行的返回值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在vscode中啟動(dòng)conda虛擬環(huán)境的思路詳解

    在vscode中啟動(dòng)conda虛擬環(huán)境的思路詳解

    這篇文章主要介紹了在vscode中啟動(dòng)conda虛擬環(huán)境的思路詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 對(duì)python模塊中多個(gè)類的用法詳解

    對(duì)python模塊中多個(gè)類的用法詳解

    今天小編就為大家分享一篇對(duì)python模塊中多個(gè)類的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-01-01
  • 深入分析python中整型不會(huì)溢出問題

    深入分析python中整型不會(huì)溢出問題

    本文給大家通過實(shí)例和原理深入分析了python中整型不會(huì)溢出的相關(guān)知識(shí)點(diǎn),有興趣的朋友可以跟著學(xué)習(xí)下。
    2018-06-06
  • Python3 hashlib密碼散列算法原理詳解

    Python3 hashlib密碼散列算法原理詳解

    這篇文章主要介紹了Python3 hashlib密碼散列算法原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python實(shí)現(xiàn)Smtplib發(fā)送帶有各種附件的郵件實(shí)例

    Python實(shí)現(xiàn)Smtplib發(fā)送帶有各種附件的郵件實(shí)例

    本篇文章主要介紹了Python實(shí)現(xiàn)Smtplib發(fā)送帶有各種附件的郵件實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Python 如何讀取.txt,.md等文本文件

    Python 如何讀取.txt,.md等文本文件

    這篇文章主要介紹了Python 讀取.txt,.md等文本文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python進(jìn)程間通信Queue工作過程詳解

    python進(jìn)程間通信Queue工作過程詳解

    這篇文章主要介紹了python進(jìn)程間通信Queue工作過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python中對(duì)象的比較操作==和is區(qū)別詳析

    Python中對(duì)象的比較操作==和is區(qū)別詳析

    這篇文章主要給大家介紹了關(guān)于Python中對(duì)象的比較操作==和is區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • django admin后臺(tái)添加導(dǎo)出excel功能示例代碼

    django admin后臺(tái)添加導(dǎo)出excel功能示例代碼

    這篇文章主要介紹了django admin 后臺(tái)添加導(dǎo)出excel功能示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2019-05-05
  • python實(shí)時(shí)監(jiān)控cpu小工具

    python實(shí)時(shí)監(jiān)控cpu小工具

    這篇文章主要為大家詳細(xì)介紹了python實(shí)時(shí)監(jiān)控cpu的小工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論

鲁甸县| 绵竹市| 台北市| 垫江县| 东宁县| 潍坊市| 高青县| 平舆县| 阳西县| 伊吾县| 措勤县| 类乌齐县| 永清县| 富平县| 马龙县| 开江县| 龙川县| 孟连| 达日县| 深圳市| 余干县| 山阴县| 双桥区| 黑河市| 北川| 宾川县| 秭归县| 无极县| 沾益县| 沙田区| 江陵县| 潢川县| 离岛区| 扎鲁特旗| 宕昌县| 青铜峡市| 嘉善县| 象州县| 且末县| 金平| 土默特左旗|