欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)多進程之間共享變量

 更新時間:2024年11月25日 09:19:01   作者:程序員貝塔  
Python多線程和多進程之間共享變量的方法有所不同,多線程可以直接使用global變量,而多進程則需要使用multiprocessing庫中的Value、Array、Queue等或Manager模塊,Pool進程池中進程間共享變量時,必須使用Manager模塊,在共享list時,不能直接賦值

Python多進程之間共享變量

Python 多線程之間共享變量很簡單,直接定義全局 global 變量即可。而多進程之間是相互獨立的執(zhí)行單元,這種方法就不可行了。

不過 Python 標(biāo)準(zhǔn)庫已經(jīng)給我們提供了這樣的能力,使用起來也很簡單。

但要分兩種情況來看,一種是 Process 多進程,一種是 Pool 進程池的方式。

Process 多進程

使用 Process 定義的多進程之間共享變量可以直接使用 multiprocessing 下的 Value,Array,Queue 等,如果要共享 list,dict,可以使用強大的 Manager 模塊。

import multiprocessing

def func(num):
    # 共享數(shù)值型變量
    # num.value = 2

    # 共享數(shù)組型變量
    num[2] = 9999


if __name__ == '__main__':
    # 共享數(shù)值型變量
    # num = multiprocessing.Value('d', 1)
    # print(num.value)

    # 共享數(shù)組型變量
    num = multiprocessing.Array('i', [1, 2, 3, 4, 5])
    print(num[:])

    p = multiprocessing.Process(target=func, args=(num,))
    p.start()
    p.join()

    # 共享數(shù)值型變量
    # print(num.value)

    # 共享數(shù)組型變量
    print(num[:])

Pool 進程池

進程池之間共享變量是不能使用上文方式的,因為進程池內(nèi)進程關(guān)系并非父子進程,想要共享,必須使用 Manager 模塊來定義。

from multiprocessing import Pool, Manager

def func(my_list, my_dict):
    my_list.append(10)
    my_list.append(11)
    my_dict['a'] = 1
    my_dict['b'] = 2


if __name__ == '__main__':
    manager = Manager()
    my_list = manager.list()
    my_dict = manager.dict()

    pool = Pool(processes=2)
    for i in range(0, 2):
        pool.apply_async(func, (my_list, my_dict))
    pool.close()
    pool.join()

    print(my_list)
    print(my_dict)

還有一點需要注意,在共享 list 時,像下面這樣寫 func 是不起作用的。

def func(my_list, my_dict):
    my_list = [10, 11]
    my_dict['a'] = 1
    my_dict['b'] = 2

這樣寫相當(dāng)于重新定義了一個局部變量,并沒有作用到原來的 list 上,必須使用 append,extend 等方法。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python海龜繪圖之繪制趣味簡筆畫

    Python海龜繪圖之繪制趣味簡筆畫

    大家好,本篇文章主要講的是Python海龜繪圖之繪制趣味簡筆畫,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • python中精確的浮點數(shù)運算示例

    python中精確的浮點數(shù)運算示例

    這篇文章主要為大家介紹了python中精確的浮點數(shù)運算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • python對二維數(shù)組賦值問題

    python對二維數(shù)組賦值問題

    這篇文章主要介紹了python對二維數(shù)組賦值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于python requests selenium爬取excel vba過程解析

    基于python requests selenium爬取excel vba過程解析

    這篇文章主要介紹了基于python requests selenium爬取excel vba過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • python使用PyGame繪制圖像并保存為圖片文件的方法

    python使用PyGame繪制圖像并保存為圖片文件的方法

    這篇文章主要介紹了python使用PyGame繪制圖像并保存為圖片文件的方法,涉及Python使用PyGame操作圖片的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • 如何使用OpenCV實現(xiàn)手勢音量控制

    如何使用OpenCV實現(xiàn)手勢音量控制

    今天來學(xué)習(xí)一下如何使用OpenCV實現(xiàn)手勢音量控制,本次實驗需要使用OpenCV和mediapipe庫進行手勢識別,并利用手勢距離控制電腦音量,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • python 讀取以空格分開的文件操作

    python 讀取以空格分開的文件操作

    這篇文章主要介紹了python 讀取以空格分開的文件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 在pycharm中文件取消用 pytest模式打開的操作

    在pycharm中文件取消用 pytest模式打開的操作

    這篇文章主要介紹了在pycharm中文件取消用 pytest模式打開的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • python 如何使用find和find_all爬蟲、找文本的實現(xiàn)

    python 如何使用find和find_all爬蟲、找文本的實現(xiàn)

    這篇文章主要介紹了python 如何使用find和find_all,爬蟲、找文本,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python實現(xiàn)單項鏈表的最全教程

    Python實現(xiàn)單項鏈表的最全教程

    單向鏈表也叫單鏈表,是鏈表中最簡單的一種形式,它的每個節(jié)點包含兩個域,一個信息域(元素域)和一個鏈接域,這個鏈接指向鏈表中的下一個節(jié)點,而最后一個節(jié)點的鏈接域則指向一個空值,這篇文章主要介紹了Python實現(xiàn)單項鏈表,需要的朋友可以參考下
    2023-01-01

最新評論