python2.7 - python【多进程】关于进程的变量的问题
PHPz
PHPz 2017-04-18 09:28:25
0
2
314
PHPz
PHPz

学习是最好的投资!

Antworte allen(2)
左手右手慢动作

Python 的变量作用域问题。解释器把你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 这个局部变量,然后才声明的,所以就出错了。去掉这一句 Python 解释器就会认为你在用全局变量,而不是局部变量。

迷茫

你的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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage