# -*- coding: utf-8 -*- """ 主线程要等到所有非守护线程结束,才能结束。 db.json----->{"count":1} """ import json from threading import Thread, Lock import time def search(name): with open('db.json', 'rt', encoding='utf-8') as f: dic = json.load(f) time.sleep(1) count = dic['count'] print('%s查看余票为%s' % (name, count)) def buy(name): with open('db.json', 'rt', encoding='utf-8') as f: dic = json.load(f) if dic['count'] == 0: print('%s 余票为0啦' % name) return dic['count'] -= 1 with open('db.json', 'wt', encoding='utf-8') as w: json.dump(dic, w) time.sleep(1) print('%s 购票成功' % name) def task(name, mutex): search(name) mutex.acquire() # 添加线程锁 buy(name) mutex.release() # 解除线程锁 if __name__ == '__main__': mutex = Lock() # 生成一个锁对象 for i in range(1, 5): t = Thread(target=task, args=('用户%s' % i, mutex)) t.start() # 用户2查看余票为1 # 用户4查看余票为1 # 用户3查看余票为1 # 用户1查看余票为1 # 用户4 购票成功 # 用户2 余票为0啦 # 用户3 余票为0啦 # 用户1 余票为0啦