首页 > 解决方案 > Python多处理:如果'__name__' == '__main__' bock,使用池调用的函数无法访问内部声明的全局变量

问题描述

我试图从一个由类对象调用的函数访问声明的global variable内部块。if __name__ == '__main__'Poolmultiprocessing

但它抛出NameError

但是,如果我将相同的变量放在块之外,代码就可以正常工作。

演示:

  1. 当在if __name__ == '__main__'块外声明时
from multiprocessing import Pool

foo = 'OKAY'

def f(x):
    print(foo)
    return x*x

if __name__ == '__main__':
    p = Pool(2)

    p.map(f, [1, 2])

输出:

OKAY
OKAY
  1. 在内部声明时if __name__ == '__main__'
from multiprocessing import Pool

def f(x):
    print(foo)
    return x*x

if __name__ == '__main__':
    foo = 'OKAY'
    p = Pool(2)
    p.map(f, [1, 2])


输出:

NameError: name 'foo' is not defined

标签: pythonmultiprocessingpython-multiprocessing

解决方案


推荐阅读