Çoklu İşlem Genel Değişkenleri Paylaşamaz | Python Başlangıç Rehberi 106

İlgili Etiketler:1.ApsaraDB RDS for MySQL
2. JavaScript'te Prototipler ve Kalıtım

Çoklu İşlem Genel Değişkenleri Paylaşamaz | Python'a Yüz Altıncı Adımda Başlayın

Çoklu işlem genel değişkenleri paylaşamaz. Aynı ana işlemde iki alt iş parçacığı bulunur. İş parçacıkları aynı işlemin genel değişkenlerini paylaşabilirken, farklı işlemler her biri kendi genel değişkenini saklar ve genel değişkenleri paylaşmaz.
Birden fazla işlem genel değişkenleri paylaşamaz
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

# Aynı ana işlemde iki alt iş parçacığı. İş parçacıkları aynı işlemin genel değişkenlerini paylaşabilir

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

# if __name__ == '__main__':
# Her işlem bir genel değişken saklar ve genel değişkenleri paylaşmaz
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
Örnek:
from multiprocessing import Process
import os

nums = [ 11 , 22 ]

def work1 () :
"""Alt işlem tarafından çalıştırılacak kod"""
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 () :
"""Alt işlem tarafından çalıştırılacak kod"""
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))
Çalıştırma sonucu:
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]
phone Bize Ulaşın
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.