余票数量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没买到票
posted @ 2022-12-04 17:01  saiya6  阅读(132)  评论(0)    收藏  举报