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 文档中有许多示例说明如何执行此操作 here。
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 文档中有许多示例说明如何执行此操作 here。