"""Tickdata >>>> {"num": 1}""" # -*- encoding: utf-8 -*- from multiprocessing import Process, Lock import time import random import json # 查库 def search(iname): with open("Tickdata", 'r', encoding='utf-8') as f: num = json.load(f) num = num.get('num') if num: print(f'{iname} find {num}') else: print(f'{iname} not find') # 更新库 def buy(iname): with open('Tickdata', 'r', encoding='utf-8') as f: dic = json.load(f) # time.sleep()模拟延迟 time.sleep(random.randint(1, 3)) if dic.get('num') > 0: dic['num'] -= 1 with open('Tickdata', 'w', encoding='utf-8') as f: json.dump(dic, f) print(f'{iname} is buyed') else: print(f'{iname} not buyed') def run(iname, mutex): search(iname) # 抢锁 mutex.acquire() buy(iname) # 释放锁 mutex.release() if __name__ == '__main__': # 加锁 mutex = Lock() for i in range(1, 10): p = Process(target=run, args=(i, mutex)) p.start()