Les processus multiples ne peuvent pas partager de variables globales | Premiers pas avec Python, épisode 106

Tags associés : 1.ApsaraDB RDS for MySQL
2. Prototypes et héritage en JavaScript

Les processus multiples ne peuvent pas partager de variables globales | Premiers pas avec Python, épisode 106

Les processus multiples ne peuvent pas partager de variables globales. Deux threads enfants dans le même processus principal. Les threads peuvent partager les variables globales d'un même processus, tandis que les différents processus conservent chacun leur propre variable globale sans les partager.
Les processus multiples ne peuvent pas partager de 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

# Deux threads enfants dans le même processus principal. Les threads peuvent partager les variables globales d'un même processus

# t1 = threading.Thread (target=test)
# t2 = threading.Thread (target=demo)
# t1.start()
# t2.start()

# if __name__ == '__main__':
# Chaque processus conserve sa propre variable globale sans les partager
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
Exemple :
from multiprocessing import Process
import os

nums = [ 11 , 22 ]

def work1 () :
"""Le code à exécuter par le processus enfant"""
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 () :
"""Le code à exécuter par le processus enfant"""
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))
Résultat d'exécution :
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]

Articles associés

Découvrir plus d'offres spéciales

  1. Service de messages courts (SMS) et service de messagerie

    50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00

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