锁
余票数量tickets.txt
{"tickets": 1}
测试代码
import json
import time
from multiprocessing import Process
def buy_ticket(user):
time.sleep(0.02)
with open('./tickets.txt') as f:
dic = json.load(f)
if dic['tickets'] > 0:
print('%s买到了票' % (user))
dic['tickets'] -= 1
with open('./tickets.txt', 'w') as f:
json.dump(dic, f)
else:
print('%s没买到票' % (user))
if __name__ == '__main__':
for i in range(10):
p = Process(target=buy_ticket, args=(i,))
p.start()
代码运行结果,不止一个人买到了票
5买到了票
1买到了票
3买到了票
0买到了票
7没买到票
8没买到票
2没买到票
6没买到票
4没买到票
9没买到票
加锁之后的代码
import json
import time
from multiprocessing import Process, Lock
def buy_ticket(user, lock):
lock.acquire() # 给这段代码上锁
time.sleep(0.02)
with open('./tickets.txt') as f:
dic = json.load(f)
if dic['tickets'] > 0:
print('%s买到了票' % (user))
dic['tickets'] -= 1
with open('./tickets.txt', 'w') as f:
json.dump(dic, f)
else:
print('%s没买到票' % (user))
lock.release() # 给这段代码解锁
if __name__ == '__main__':
lock = Lock() # 创建一把锁
for i in range(10):
p = Process(target=buy_ticket, args=(i, lock))
p.start()
运行结果,只有一个人买到了票
0买到了票
1没买到票
2没买到票
3没买到票
5没买到票
4没买到票
6没买到票
7没买到票
9没买到票
8没买到票
浙公网安备 33010602011771号