ringa_lee2017-04-18 09:30:25
Python 的变量作用域问题。解释器把你run_proc
里的 gcc
当成新变量了。run_proc
里的 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
print
前添加 global gcc
即可。🎜
rrreee
🎜就可以得到期望的结果。🎜
🎜顺便说一句,下次提问记得把错误信息也写在题目里。🎜
🎜补充:如果删掉gcc='son'
这句,不加 global
也能跑通,这是因为 gcc='son'
同时也被 Python 当作了对函数内局部变量的声明语句。gcc
这个局部变量,然后才声明的,所以就出错了。去掉这一句 Python 解释器就会认为你在用全局变量,而不是局部变量。🎜迷茫2017-04-18 09:30:25
你的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