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

python多進(jìn)程共享Array問題

 更新時間:2024年09月09日 16:07:40   作者:言之兮兮  
multiprocessing庫提供了Array類,允許在多個進(jìn)程間共享數(shù)組,Array在共享內(nèi)存中創(chuàng)建,各進(jìn)程可直接訪問和修改其元素,實現(xiàn)數(shù)據(jù)同步,Array支持多種數(shù)據(jù)類型,可選鎖定參數(shù)以保證數(shù)據(jù)安全

目的

可以使用multiprocessing庫中的Array來實現(xiàn)多進(jìn)程共享Array。

multiprocessing庫是一個用于實現(xiàn)多進(jìn)程編程的庫,提供了與多進(jìn)程有關(guān)的同步,通信和進(jìn)程管理等功能。

在這個庫中,有一個Array類,用于創(chuàng)建一個多進(jìn)程共享的數(shù)組。

這樣,每個進(jìn)程都可以訪問這個共享的數(shù)組,從而實現(xiàn)數(shù)據(jù)共享和同步。

基礎(chǔ)知識介紹

1.multiprocessing.Array

  • multiprocessing.Array是Python的多進(jìn)程庫中的一個數(shù)組對象,它用于在多個進(jìn)程之間共享數(shù)組數(shù)據(jù)。
  • Array類型是在共享內(nèi)存中實現(xiàn)的,每個進(jìn)程可以操作該數(shù)組的值。這是在多個進(jìn)程間同步數(shù)據(jù)的一種常用方法,因為它們在同一內(nèi)存中運行。
  • 使用multiprocessing.Array,你可以創(chuàng)建一個共享的數(shù)組,并在多個進(jìn)程中讀取和修改數(shù)組的值。
  • 通過使用該模塊,您可以避免將數(shù)組通過管道或套接字從一個進(jìn)程傳遞到另一個進(jìn)程的問題。

2.multiprocessing.Array 函數(shù)接受以下參數(shù)

  • typecode:字符串,表示數(shù)組元素的數(shù)據(jù)類型。可用的數(shù)據(jù)類型包括 'b'(布爾),'i'(整數(shù)),'f'(浮點數(shù)),'c'(單字符),'u'(Unicode字符)等。
  • size:整數(shù),表示數(shù)組的大小。
  • lock:布爾值,指示是否應(yīng)該為數(shù)組元素創(chuàng)建鎖(鎖定)。

以上參數(shù)中,前兩個是必需的,而后一個是可選的。

python多進(jìn)程共享一維Array

舉個例子,你可以使用multiprocessing庫中的Array創(chuàng)建一個整型數(shù)組,并在兩個進(jìn)程中分別執(zhí)行讀取和寫入操作,從而實現(xiàn)多進(jìn)程共享Array。

  • 代碼
from multiprocessing import Process, Array
import time


def print_array(arr, n):
    while True:
        for i in range(n):
            print("Process {}: {}".format(i, arr[i]))
        time.sleep(1)


test_count = 1


def set_array(arr, n):
    global test_count
    while True:
        for i in range(n):
            arr[i] = i + test_count
        time.sleep(1)
        test_count += 1
        print(test_count)


if __name__ == "__main__":
    arr = Array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0])
    n = len(arr)
    process1 = Process(target=print_array, args=(arr, n))
    process2 = Process(target=set_array, args=(arr, n))

    process1.start()
    process2.start()

    process1.join()
    process2.join()

這段代碼創(chuàng)建了兩個進(jìn)程:一個打印數(shù)組的進(jìn)程(print_array)和一個設(shè)置數(shù)組的進(jìn)程(set_array)。這兩個進(jìn)程同時運行,互不影響。

  • print_array 進(jìn)程通過一個循環(huán)打印數(shù)組中的每一個元素,并在每次循環(huán)之后等待 1 秒。
  • set_array 進(jìn)程通過一個循環(huán)設(shè)置數(shù)組中的每一個元素,并在每次循環(huán)之后等待 1 秒。它設(shè)置的數(shù)組的每一個元素的值都是經(jīng)過累加的。

通過 Array 對象,兩個進(jìn)程共享同一個數(shù)組。需要注意的是,在 Python 中多進(jìn)程之間共享數(shù)據(jù)時需要特殊處理,以保證同步與數(shù)據(jù)完整性。這里使用的 multiprocessing.Array 可以方便地共享數(shù)組。

程序的主流程是創(chuàng)建兩個進(jìn)程,啟動它們并等待它們結(jié)束。當(dāng)兩個進(jìn)程都結(jié)束后,程序結(jié)束。

  • 運行結(jié)果:

Process 0: 0
Process 1: 0
Process 2: 0
Process 3: 0
Process 4: 0
Process 5: 0
Process 6: 0
Process 7: 0
Process 8: 0
2
Process 0: 1
Process 1: 3
Process 2: 4
Process 3: 5
Process 4: 6
Process 5: 7
Process 6: 8
Process 7: 9
Process 8: 10
Process 0: 2
Process 1: 3
Process 2: 4
3Process 3: 5

Process 4: 6
Process 5: 7
Process 6: 8
Process 7: 9
Process 8: 10
4
Process 0: 3
Process 1: 4
Process 2: 6
Process 3: 7
Process 4: 8
Process 5: 9
Process 6: 10
Process 7: 11
Process 8: 12

python多進(jìn)程共享多維Array

在 Python 中,使用multiprocessing模塊的Array來共享多維數(shù)組在多進(jìn)程中需要用到一些特殊的技巧。

首先,你需要定義一個共享內(nèi)存,并在多個進(jìn)程中共享該內(nèi)存。

例如,如果你想要共享一個3維數(shù)組,可以定義一個二維共享內(nèi)存數(shù)組,然后再在每個進(jìn)程中訪問它,它仍然是共享的。

下面是一個示例代碼,該代碼演示了如何在兩個進(jìn)程中共享一個3維數(shù)組:

  • 代碼
from multiprocessing import Process, Array
import time
import numpy as np


def print_array(arr, shape):
    while True:
        print("Process: \n")
        print(np.array(arr).reshape(shape))
        time.sleep(1)


def set_array(arr, shape):
    while True:
        np.random.shuffle(arr)
        time.sleep(1)
        print("Shuffled the array")


if __name__ == "__main__":
    shape = (2, 3, 4)
    arr = Array('d', np.arange(np.prod(shape)))
    process1 = Process(target=print_array, args=(arr, shape))
    process2 = Process(target=set_array, args=(arr, shape))

    process1.start()
    process2.start()

    process1.join()
    process2.join()

在上面的代碼中,我們使用了multiprocessing庫中的Array來實現(xiàn)多進(jìn)程共享一個3維數(shù)組,它們可以在兩個獨立的進(jìn)程中讀取和修改這個數(shù)組。

打印結(jié)果可能是一個不斷變化的3維數(shù)組,每隔1秒進(jìn)行重新洗牌。

  • 運行結(jié)果

Process: 
[[[ 0.  1.  2.  3.]
  [ 4.  5.  6.  7.]
  [ 8.  9. 10. 11.]]

 [[12. 13. 14. 15.]
  [16. 17. 18. 19.]
  [20. 21. 22. 23.]]]

警告信息

UserWarning: you are shuffling a 'SynchronizedArray' object which is not a subclass of 'Sequence'; `shuffle` is not guaranteed to behave correctly. E.g., non-numpy array/tensor objects with view semantics may contain duplicates after shuffling.

np.random.shuffle(arr)

np.random.shuffle是numpy庫中的一個函數(shù),它可以對一維數(shù)組進(jìn)行隨機(jī)打亂。

語法:

numpy.random.shuffle(x)

參數(shù):

  • x:需要打亂的一維數(shù)組。

返回值:

  • 無返回值,直接對數(shù)組進(jìn)行打亂。

該函數(shù)在使用時需要注意,不保證所有情況下都會正確實現(xiàn)。

例如,具有視圖語義的非numpy數(shù)組/張量對象在洗牌后可能會包含重復(fù)的元素。

總結(jié)

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

相關(guān)文章

  • Python基于property實現(xiàn)類的特性操作示例

    Python基于property實現(xiàn)類的特性操作示例

    這篇文章主要介紹了Python基于property實現(xiàn)類的特性,結(jié)合實例形式分析了使用property實現(xiàn)類的特性相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-06-06
  • Python爬蟲框架NewSpaper使用詳解

    Python爬蟲框架NewSpaper使用詳解

    這篇文章主要為大家介紹了Python爬蟲框架NewSpaper使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 深入探索Python解碼神器Chardet自動檢測文本編碼

    深入探索Python解碼神器Chardet自動檢測文本編碼

    Chardet,洞察編碼的清晰水晶球,一個讓你與編碼不再“失聯(lián)”的神器,本文帶大家走近這個隱藏在Python工具箱中的小寶貝,探索它的秘密
    2024-01-01
  • Python中繪制折線圖的全面指南(非常詳細(xì)!)

    Python中繪制折線圖的全面指南(非常詳細(xì)!)

    對于數(shù)據(jù)而言一般都會使用折線圖反映數(shù)據(jù)背后的趨勢,下面這篇文章主要給大家介紹了關(guān)于Python中繪制折線的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Python try except else使用詳解

    Python try except else使用詳解

    這篇文章主要介紹了Python try except else使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • pytorch中的nn.ZeroPad2d()零填充函數(shù)實例詳解

    pytorch中的nn.ZeroPad2d()零填充函數(shù)實例詳解

    這篇文章主要介紹了pytorch中的nn.ZeroPad2d()零填充函數(shù)實例詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 分享3個簡單的Python代碼高效運行技巧

    分享3個簡單的Python代碼高效運行技巧

    這篇文章主要介紹了分享3個簡單的Python代碼高效運行技巧,下面主要分享三個有效的,方便理解的,執(zhí)行高效的實用技巧,需要的朋友可以參考一下
    2022-03-03
  • Django 數(shù)據(jù)庫同步操作技巧詳解

    Django 數(shù)據(jù)庫同步操作技巧詳解

    這篇文章主要介紹了Django 數(shù)據(jù)庫同步操作技巧詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Linux RedHat下安裝Python2.7開發(fā)環(huán)境

    Linux RedHat下安裝Python2.7開發(fā)環(huán)境

    這篇文章主要為大家詳細(xì)介紹了Linux RedHat下安裝Python2.7、pip、ipython環(huán)境、eclipse和PyDev環(huán)境,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Python新手教程之while循環(huán)20例

    Python新手教程之while循環(huán)20例

    循環(huán)的作用就是讓指定的代碼重復(fù)的執(zhí)行,while循環(huán)最常用的應(yīng)用場景就是讓執(zhí)行的代碼按照指定的次數(shù)重復(fù)執(zhí)行,這篇文章主要給大家介紹了關(guān)于Python新手教程之while循環(huán)20例的相關(guān)資料,需要的朋友可以參考下
    2024-05-05

最新評論