Multiprozesse können keine globalen Variablen teilen | Python-Einstieg Teil 106
Verwandte Tags:1. ApsaraDB RDS for MySQL
2. Prototypen und Vererbung in JavaScript
Multiprozesse können keine globalen Variablen teilen | Python-Einstieg Teil 106
Multiprozesse können keine globalen Variablen teilen. Zwei Kind-Threads im selben Hauptprozess. Threads können globale Variablen desselben Prozesses teilen, während verschiedene Prozesse jeweils eine eigene Kopie der globalen Variable speichern und diese nicht gemeinsam nutzen.
Mehrere Prozesse können keine globalen Variablen teilen
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
# Zwei Kind-Threads im selben Hauptprozess. Threads können globale Variablen desselben Prozesses teilen

# t1 = threading.Thread (target=test)
# t2 = threading.Thread (target=demo)
# t1.start()
# t2.start()
# if __name__ == '__main__':
# Jeder Prozess speichert eine eigene globale Variable und teilt sie nicht mit anderen Prozessen
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
Beispiel:
from multiprocessing import Process
import os
nums = [ 11 , 22 ]
def work1 () :
"""Der vom Kindprozess auszuführende Code"""
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 () :
"""Der vom Kindprozess auszuführende Code"""
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))
Ausgabe:
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. Prototypen und Vererbung in JavaScript
Multiprozesse können keine globalen Variablen teilen | Python-Einstieg Teil 106
Multiprozesse können keine globalen Variablen teilen. Zwei Kind-Threads im selben Hauptprozess. Threads können globale Variablen desselben Prozesses teilen, während verschiedene Prozesse jeweils eine eigene Kopie der globalen Variable speichern und diese nicht gemeinsam nutzen.
Mehrere Prozesse können keine globalen Variablen teilen
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
# Zwei Kind-Threads im selben Hauptprozess. Threads können globale Variablen desselben Prozesses teilen

# t1 = threading.Thread (target=test)
# t2 = threading.Thread (target=demo)
# t1.start()
# t2.start()
# if __name__ == '__main__':
# Jeder Prozess speichert eine eigene globale Variable und teilt sie nicht mit anderen Prozessen
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
Beispiel:
from multiprocessing import Process
import os
nums = [ 11 , 22 ]
def work1 () :
"""Der vom Kindprozess auszuführende Code"""
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 () :
"""Der vom Kindprozess auszuführende Code"""
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))
Ausgabe:
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]
Verwandte Artikel
-
6 optionale Technologien für die Datenspeicherung
Wissensdatenbank-Team
Weitere Sonderangebote entdecken
-
Kurznachrichtendienst (SMS) & E-Mail-Dienst
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00
