Los multiprocesos no pueden compartir variables globales | Primeros pasos con Python (lección 106)
Etiquetas relacionadas: 1.ApsaraDB RDS for MySQL
2. Prototipos y herencia en JavaScript
Los multiprocesos no pueden compartir variables globales | Primeros pasos con Python (lección 106)
Los multiprocesos no pueden compartir variables globales. Dos subprocesos secundarios en el mismo proceso principal. Los subprocesos pueden compartir las variables globales del mismo proceso; en cambio, cada proceso guarda su propia variable global y no la comparte.
Varios procesos no pueden compartir variables globales
import os , multiprocessing, threading
n = 100
def test () :
global n
n += 1
print( The value of n in 'test===={} is {}' .format( os.getpid (), hex(id(n))))
def demo () :
global n
n += 1
print( The value of n in 'demo===={} is {}' .format( os.getpid (), hex(id(n))))
print( threading.current_thread ().name)
test() # 101
demo() # 102
# Two child threads in the same main process. Threads can share global variables of the same process

# t1 = threading.Thread (target=test)
# t2 = threading.Thread (target=demo)
# t1.start()
# t2.start()
# if __name__ == '__main__':
# Each process saves a global variable and does not share global variables
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
Ejemplo:
from multiprocessing import Process
import os
nums = [ 11 , 22 ]
def work1 () :
"""The code to be executed by the child process"""
print( "in process1 pid =%d , nums =%s" %( os.getpid (), nums ))
for i in range( 3 ):
nums.append ( i )
print( "in process1 pid =%d , nums =%s" %( os.getpid (), nums ))
def work2 () :
"""The code to be executed by the child process"""
nums.pop ()
print( "in process2 pid =%d , nums =%s" %( os.getpid (), nums ))
if __name__ == '__main__':
p1 = Process(target=work1)
p1.start()
p1.join()
p2 = Process(target=work2)
p2.start()
print('in process0 pid={} ,nums={}'.format(os.getpid(),nums))
Resultado de la ejecución:
in process1 pid=2707 ,nums=[11, 22]
in process1 pid=2707 ,nums=[11, 22, 0]
in process1 pid=2707 ,nums=[11, 22, 0, 1]
in process1 pid=2707 ,nums=[11, 22, 0, 1, 2]
in process0 pid=2706 ,nums=[11, 22]
in process2 pid=2708 ,nums=[11]
2. Prototipos y herencia en JavaScript
Los multiprocesos no pueden compartir variables globales | Primeros pasos con Python (lección 106)
Los multiprocesos no pueden compartir variables globales. Dos subprocesos secundarios en el mismo proceso principal. Los subprocesos pueden compartir las variables globales del mismo proceso; en cambio, cada proceso guarda su propia variable global y no la comparte.
Varios procesos no pueden compartir variables globales
import os , multiprocessing, threading
n = 100
def test () :
global n
n += 1
print( The value of n in 'test===={} is {}' .format( os.getpid (), hex(id(n))))
def demo () :
global n
n += 1
print( The value of n in 'demo===={} is {}' .format( os.getpid (), hex(id(n))))
print( threading.current_thread ().name)
test() # 101
demo() # 102
# Two child threads in the same main process. Threads can share global variables of the same process

# t1 = threading.Thread (target=test)
# t2 = threading.Thread (target=demo)
# t1.start()
# t2.start()
# if __name__ == '__main__':
# Each process saves a global variable and does not share global variables
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
Ejemplo:
from multiprocessing import Process
import os
nums = [ 11 , 22 ]
def work1 () :
"""The code to be executed by the child process"""
print( "in process1 pid =%d , nums =%s" %( os.getpid (), nums ))
for i in range( 3 ):
nums.append ( i )
print( "in process1 pid =%d , nums =%s" %( os.getpid (), nums ))
def work2 () :
"""The code to be executed by the child process"""
nums.pop ()
print( "in process2 pid =%d , nums =%s" %( os.getpid (), nums ))
if __name__ == '__main__':
p1 = Process(target=work1)
p1.start()
p1.join()
p2 = Process(target=work2)
p2.start()
print('in process0 pid={} ,nums={}'.format(os.getpid(),nums))
Resultado de la ejecución:
in process1 pid=2707 ,nums=[11, 22]
in process1 pid=2707 ,nums=[11, 22, 0]
in process1 pid=2707 ,nums=[11, 22, 0, 1]
in process1 pid=2707 ,nums=[11, 22, 0, 1, 2]
in process0 pid=2706 ,nums=[11, 22]
in process2 pid=2708 ,nums=[11]
Artículos relacionados
-
6 tecnologías opcionales de almacenamiento de datos
Equipo de la base de conocimiento
Ver más ofertas especiales
-
Short Message Service (SMS) y Mail Service
Paquete de 50,000 correos electrónicos desde USD $1.99, 120 mensajes cortos desde USD $1.00
