簡體   English   中英

python中共享內存的問題無法正常工作

[英]problem with shared memory in python not getting into function

所以我有arg parse,它在其中調用file.py,我有一個父函數,它使子進程使用多處理進程我在開始時共享內存,但它無法訪問。

imports.....
arr1 = Array("i", args.p)

def temp(listFile, a, c, l):
   ------------
   arr1.value[0] += 1

def main1(files = args.f, a = args.a, c = args.c, l = args.l, p = args.p):
    newP = Process(target=temp, args = (listFile, a, c, l))
    start()
    join()  

if __name__ == '__main__':
 parser = argparse.ArgumentParser()

    ------parsing arguments-----

 main1(files = args.f, a = args.a, c = args.c, l = args.l, p = args.p)

這不是真正的代碼,太多行但我認為這不是編碼問題

我的問題的種子,出於某種原因,即使我有一個共享內存數組,也無法在函數 temp 中找到這個數組,給出錯誤 NameError: name 'arr1' is not defined on line arr1.value[0] += 1

我認為這可能是因為 argparse 讀取了文件。 有任何想法嗎?

文檔中的示例顯示arr1在主線程中創建,然后作為參數傳遞給每個進程。 您不希望在每個流程中都創建它。

所以你會想要這樣的東西:

imports.....

function temp(listFile, a, c, l, arr1):
   arr1[0] += 1

function main1(files = args.f, a = args.a, c = args.c, l = args.l, p = args.p):
    arr1 = Array("i", args.p)
    newP = Process(target=temp, args = (listFile, a, c, l, arr1))
    newP.start()
    newP.join() 
    # arr1[0] should now be 1.

一位評論者指出,他們更喜歡在頂層創建共享內存。 在這種情況下,您應該將arr1 = ...移到if __name__ == '__main__'之下。 重要的是共享內存由主線程創建一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM