学习是最好的投资!
Python 的变量作用域问题。解释器把你run_proc里的 gcc 当成新变量了。
run_proc
gcc
在 print 前添加 global gcc 即可。
print
global gcc
#!/usr/bin/env python # -*- coding: utf-8 -*- from multiprocessing import Process import os gcc='parent' # 子进程要执行的代码 def run_proc(name): global gcc #################################### print 'Son Process:',gcc #################################### gcc='son' print 'Son Process:',gcc if __name__=='__main__': p = Process(target=run_proc, args=('test',)) p.start() p.join() print 'Parent Process:',gcc
就可以得到期望的结果。
顺便说一句,下次提问记得把错误信息也写在题目里。
补充:如果删掉gcc='son'这句,不加 global 也能跑通,这是因为 gcc='son' 同时也被 Python 当作了对函数内局部变量的声明语句。原来的代码相当于你先用了 gcc 这个局部变量,然后才声明的,所以就出错了。去掉这一句 Python 解释器就会认为你在用全局变量,而不是局部变量。
gcc='son'
global
你的gcc变量定义在函数的外部,你却在函数内部调用,所以你会得到下面的错误
UnboundLocalError: local variable 'gcc' referenced before assignment
你可以把代码改成这样,再试试。
import os from multiprocessing import Process gcc = 'parent' def run_proc(name): global gcc print 'Son Process:',gcc gcc = 'son' print 'Son Process:',gcc if __name__ == '__main__': p = Process(target=run_proc, args=('test',)) p.start() p.join() print 'Parent Process:',gcc
我得到了下面的运行结果:
python $python q.py Son Process: parent Son Process: son Parent Process: parent
Python 的变量作用域问题。解释器把你
run_proc
里的gcc
当成新变量了。在
print
前添加global gcc
即可。就可以得到期望的结果。
顺便说一句,下次提问记得把错误信息也写在题目里。
补充:如果删掉
gcc='son'
这句,不加global
也能跑通,这是因为gcc='son'
同时也被 Python 当作了对函数内局部变量的声明语句。原来的代码相当于你先用了
gcc
这个局部变量,然后才声明的,所以就出错了。去掉这一句 Python 解释器就会认为你在用全局变量,而不是局部变量。你的
gcc
变量定义在函数的外部,你却在函数内部调用,所以你会得到下面的错误你可以把代码改成这样,再试试。
我得到了下面的运行结果: