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]

Verwandte Artikel

Weitere Sonderangebote entdecken

  1. 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

phone Kontakt
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.