マルチプロセスではグローバル変数を共有できない | Python 入門 その 106
関連タグ:1.ApsaraDB RDS for MySQL
2. Prototypes and Inheritance in JavaScript
マルチプロセスではグローバル変数を共有できない | Python 入門 その 106
マルチプロセスではグローバル変数を共有できません。同じメインプロセス内の 2 つの子スレッドはグローバル変数を共有できますが、異なるプロセスはそれぞれ独自にグローバル変数を保持し、共有しません。
Multiple processes cannot share global variables
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
# 同じメインプロセス内の 2 つの子スレッド。スレッドは同じプロセスのグローバル変数を共有できる

# t1 = threading.Thread (target=test)
# t2 = threading.Thread (target=demo)
# t1.start()
# t2.start()
# if __name__ == '__main__':
# 各プロセスはグローバル変数を独自に保持し、共有しない
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
例:
from multiprocessing import Process
import os
nums = [ 11 , 22 ]
def work1 () :
"""子プロセスで実行するコード"""
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 () :
"""子プロセスで実行するコード"""
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))
実行結果:
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. Prototypes and Inheritance in JavaScript
マルチプロセスではグローバル変数を共有できない | Python 入門 その 106
マルチプロセスではグローバル変数を共有できません。同じメインプロセス内の 2 つの子スレッドはグローバル変数を共有できますが、異なるプロセスはそれぞれ独自にグローバル変数を保持し、共有しません。
Multiple processes cannot share global variables
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
# 同じメインプロセス内の 2 つの子スレッド。スレッドは同じプロセスのグローバル変数を共有できる

# t1 = threading.Thread (target=test)
# t2 = threading.Thread (target=demo)
# t1.start()
# t2.start()
# if __name__ == '__main__':
# 各プロセスはグローバル変数を独自に保持し、共有しない
# p1 = multiprocessing.Process (target=test)
# p2 = multiprocessing.Process (target=demo)
# p1.start() # 101
# p2.start() # 101
例:
from multiprocessing import Process
import os
nums = [ 11 , 22 ]
def work1 () :
"""子プロセスで実行するコード"""
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 () :
"""子プロセスで実行するコード"""
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))
実行結果:
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]
関連記事
-
データストレージの 6 つのオプション技術
ナレッジベースチーム
特別オファーをもっと見る
-
Short Message Service (SMS) & メールサービス
50,000 通のメールパッケージが USD 1.99 から、120 通のショートメッセージが USD 1.00 から
