python中的池(多处理)内未访问全局变量

时间:2021-06-16 18:58:56

标签: python python-multiprocessing python-pool

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

在多处理池中未访问全局变量。

1 个答案:

答案 0 :(得分:1)

您无法在单独的池进程中访问它,因为每个进程都启动了自己的 Python 解释器,并且全局变量不在其中。

您需要将您需要的变量传递给每个池进程。 Processes 之间有多种通信方式。其中之一是 multiprocessing.Queue(),还有其他方法。 Python.org 文档中有许多示例说明如何执行此操作here

相关问题