案例1
import threading
import time
list1 = [0] * 10
def task1():
for i in range(len(list1)):
list1[i] = 1
time.sleep(0.5)
print('--1-->', list1[i])
def task2():
for i in range(len(list1)):
print('--2-->', list1[i])
time.sleep(0.5)
if __name__ == '__main__':
t1 = threading.Thread(target=task1)
t2 = threading.Thread(target=task2)
t2.start()
t1.start()
t2.join()
t1.join()
print(list1)案例2
import threading
from time import sleep
ticket = 1000
def run1():
global ticket # 使用全局变量
for i in range(100):
sleep(0.1)
ticket -= 1
print("-------->这是run1,票的值是", ticket)
def run2():
global ticket # 使用全局变量
for i in range(150):
sleep(0.2)
ticket -= 1
print("-------->这是run2,票的值是", ticket)
if __name__ == "__main__":
th1 = threading.Thread(target=run1, name="th1")
th2 = threading.Thread(target=run2, name="th2")
th1.start()
th2.start()
th1.join()
th2.join()
print('money:', ticket)以上代码都能正在运行。
问题一、代码案例1中的“list1”和代码案例2中的“ticket”是否属于主线程的变量?
问题二、代码案例1中的“list1”和代码案例2中的“ticket”是否属于全局变量?
问题三、为什么代码案例1两个子线程不需要增加global list1,而可以直接使用变量list?
问题四:对比代码案例1,为什么代码案例2中的两个子线程必须增加global ticket,才可以使用变量ticket?
哪位大神帮忙解读一下呢?