簡體   English   中英

python中的池(多處理)內未訪問全局變量

[英]Global variable not accessed inside pool(multiprocessing) in python

main 中定義的全局變量在普通函數中訪問,但在 Pool() 中未訪問

from multiprocessing import Pool    
import functools


def inc(x):
    print( x + 1)
    
    print(headers) # GETTING ERROR HERE

def dec(x):
    print (x - 1)
    

def add(x, y):
    print (x + y)
    
    
    
def a(f):
    f()
    


def main():
    print(headers)
    
    f_inc = functools.partial(inc, 4)
    f_dec = functools.partial(dec, 2)
    f_add = functools.partial(add, 3, 4)

    
    with Pool() as pool:
        res = pool.map(a, [f_inc, f_dec, f_add])

    print(res)


if __name__ == '__main__':
    global headers
    headers = {'Accept': 'application/json'}
    main()

預期輸出是

{'Accept': 'application/json'}
5
{'Accept': 'application/json'}
1
7
None

但我得到的輸出是

{'Accept': 'application/json'}
    5

NameError: name 'headers' is not defined

在多處理池中未訪問全局變量。

您無法在單獨的池進程中訪問它,因為每個進程都啟動了自己的 Python 解釋器,並且全局變量不在其中。

您需要將所需的變量傳遞給每個池進程。 Processes之間有多種通信方式。 其中之一是multiprocessing.Queue() ,還有其他方法。 Python.org 文檔中有許多示例展示了如何在此處執行此操作。

暫無
暫無

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

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