[英]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.