7行目をコメントアウトすると出力が違う理由がわかりません。コードは次のとおりです。
#!/usr/bin/python
import threading
import time
def loop(thread_name):
if False:
print "1111" #The print is only used to prove this code block indeed not excute
global dict_test # The output will be different when commenting this line code
else:
dict_test = {}
i = 0
while i < 10:
i+=1
print "thread %s %s" % (thread_name,id(dict_test))
time.sleep(1)
t1=threading.Thread(target=loop,args=('1'))
t2=threading.Thread(target=loop,args=('2'))
t1.start()
t2.start()
t1.join()
t2.join()
どの条件が一致してもグローバル変数がプリコンパイルされるという説明がある場合、次のコードでエラーが報告されるのはなぜですか?
#!/usr/bin/python
import threading
import time
def loop(thread_name):
if False:
print "1111" #The print is only used to prove this code block indeed not excute
global dict_test # The output will be different when commenting or uncommenting this line code
else:
# dict_test = {}
pass
i = 0
while i < 10:
i+=1
print "thread %s %s" % (thread_name,id(dict_test))
time.sleep(1)
t1=threading.Thread(target=loop,args=('1'))
t2=threading.Thread(target=loop,args=('2'))
t1.start()
t2.start()
t1.join()
t2.join()