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

学习是最好的投资!

membalas semua(2)
左手右手慢动作

Masalah skop pembolehubah Python. Jurubahasa menganggap run_proc dalam gcc anda sebagai pembolehubah baharu.

Cuma tambah print sebelum 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
    

Anda boleh mendapatkan hasil yang diinginkan.

Sebenarnya, ingat untuk menulis mesej ralat dalam soalan lain kali.

Tambahan: Jika anda memadamkan ayat gcc='son', anda masih boleh menjalankan tanpa menambah global Ini kerana gcc='son' juga digunakan oleh Python sebagai pernyataan pengisytiharan untuk pembolehubah tempatan dalam fungsi.
Kod asal adalah bersamaan dengan anda menggunakan pembolehubah tempatan gcc dahulu dan kemudian mengisytiharkannya, jadi terdapat ralat. Jika anda mengalih keluar ayat ini, penterjemah Python akan berfikir bahawa anda menggunakan pembolehubah global dan bukannya pembolehubah tempatan.

迷茫

Pembolehubah gcc anda ditakrifkan di luar fungsi, tetapi anda memanggilnya di dalam fungsi, jadi anda akan mendapat ralat berikut

UnboundLocalError: local variable 'gcc' referenced before assignment

Anda boleh menukar kod ini dan cuba lagi.

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

Saya mendapat keputusan berikut:

python $python q.py 
Son Process: parent
Son Process: son
Parent Process: parent
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan