上一篇:多线程版聊天 | 手把手教你入门Python之一百
下一篇:线程锁的使用 | 手把手教你入门Python之一百零二
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
线程访问全局变量
在一个进程内的所有线程共享全局变量,很方便在多个线程间共享数据。缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱(即线程非安全)。
import threading
g_num = 0
def test(n):
global g_num
for x in range(n):
g_num += x
g_num -= x
print(g_num)
if __name__ == '__main__':
t1 = threading.Thread(target=test, args=(10,))
t2 = threading.Thread(target=test, args=(10,))
t1.start()
t2.start()
线程安全问题
import threading
import time
# 多个线程可以同时操作一个全局变量(多个线程共享全局变量)
# 线程安全问题
ticket = 20
def sell_ticket():
global ticket
while True: # ticket = 1 线程1:1 线程2: 1
if ticket > 0:
time.sleep(1) # 线程1: ticket=1 线程2:ticket=1
ticket -= 1 # 线程1: ticket = 0 线程2:ticket=-1
print('{}卖出一张票,还剩{}张'.format(threading.current_thread().name, ticket))
else:
print('票卖完了')
break
t1 = threading.Thread(target=sell_ticket, name='线程1')
t2 = threading.Thread(target=sell_ticket, name='线程2')
t1.start()
t2.start()