Ç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]
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]
