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.
Masalah skop pembolehubah Python. Jurubahasa menganggap
run_proc
dalamgcc
anda sebagai pembolehubah baharu.Cuma tambah
print
sebelumglobal 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 menambahglobal
Ini keranagcc='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 berikutAnda boleh menukar kod ini dan cuba lagi.
Saya mendapat keputusan berikut: