进程(转账,卖票)
银行转账问题
from multiprocessing import Process, Value, Lock
import time# 取钱
def getMoney(money, lock):lock.acquire() # 上锁for i in range(30):money.value -= 1# print(money.value)time.sleep(0.01)lock.release() # 开锁# 存钱
def putMoney(money, lock):lock.acquire() # 上锁for i in range(30):money.value += 1time.sleep(0.01)lock.release() # 开锁if __name__ == '__main__':# 设置money为共享money = Value("i", 100)# 创建锁对象lock = Lock()p1 = Process(target=getMoney, args=(money, lock))p2 = Process(target=putMoney, args=(money, lock))p1.start()p2.start()p1.join()p2.join()print(money.value)
火车票售卖
from multiprocessing import Process,Value,Lock
import timeclass MyProcess(Process):def __init__(self,name,lock):super(MyProcess, self).__init__()self.name = nameself.lock = lockdef run(self):# p2 p3while 1:# p1 p2 p3self.lock.acquire() # 上锁with open("火车票") as file:tickNum = int(file.read())if tickNum > 0:time.sleep(0.5) # p1print("%s 窗口卖了第 %s 张票"%(self.name,tickNum))# 票数减少tickNum -= 1# 更新文件中的票总数with open("火车票","w") as file:file.write(str(tickNum))self.lock.release() # 开锁if __name__ == '__main__':lock = Lock()p1 = MyProcess("1号",lock)p2 = MyProcess("2号",lock)p3 = MyProcess("3号",lock)p1.start()p2.start()p3.start()