搜索

首页  >  问答  >  正文

python2.7 - python【多进程】关于进程的变量的问题

PHPzPHPz2900 天前321

全部回复(2)我来回复

  • ringa_lee

    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 解释器就会认为你在用全局变量,而不是局部变量。🎜

    回复
    0
  • 迷茫

    迷茫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

    回复
    0
  • 取消回复