簡體   English   中英

Python:如何使用pprocess修改函數中的全局變量

[英]Python: How to modify a global variable in a function using pprocess

當使用從pprocess調用的函數時,我似乎無法在Python中修改全局變量。 這是我的例子:

import pprocess
import time

numbers=[0,0,0,0,0,0,0,0,0,0]

# find system time and store in global variable
def find_time(index):
    global numbers
    x=time.time()
    print "Setting element %s of numbers to %f" % (index, x)
    numbers[index]=x
    return x

# parallel execution of the function
results=pprocess.pmap(find_time, [0,1,2,3,4,5,6,7,8,9], limit=6)

for y in results:
    print '%f' % y

# this list is unchanged
print numbers

# serial execution of the function
for x in [0,1,2,3,4,5,6,7,8,9]:
    find_time(x)

# now it seems to work
print numbers

“numbers”只是一個零列表,為了演示,我試圖將每個列表元素設置為當前系統時間。 當使用pprocess調用時,這不起作用,但是當我使用一個簡單的for循環來調用該函數時,全局變量就會改變。

我花了一些時間閱讀全球變量,並真誠地希望這不是一個微不足道的問題。 任何人都可以向我解釋發生了什么事嗎?

非常感謝,

恩諾

我的理解是, pprocess采用subprocessing引擎蓋下。 如果是這種情況,那么每次運行該函數時,它實際上都是一個單獨的過程。 因此,當函數返回時,這些更改不會顯示。

您可能需要將列表設置為multiprocessing.Manager

例如

numbers = multiprocessing.Manager().list([0]*10)

pprocess創建另一個進程。 這意味着它不與調用代碼共享內存。 並行進程修改的任何內容都將在其自己的內存空間中進行修改,因此調用代碼的內存空間將保持不變。 那就是 - 他們不共享全局變量。

您必須通過管道或任何pprocess或套接字等明確地在兩者之間進行所有通信。

暫無
暫無

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

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