5.1.8 模拟抢票


from multiprocessing import Process
from multiprocessing import current_process
import time
from multiprocessing import Lock
import json



def select(name):
print(name, '正在查询剩余票数。。。。')
n_dict = json.load(open('jipiao.db', mode='r', encoding='utf8'))
print('json', n_dict)
time.sleep(1)
print(name, '查询到还有%s张票!' % n_dict['count'])


def buy(name):

print(name, '正在买票。。。。。')
n_dict = json.load(open('jipiao.db', mode='r', encoding='utf8'))
if n_dict['count'] > 0:
n_dict['count'] -= 1
time.sleep(3)
json.dump(n_dict, open('jipiao.db', mode='w', encoding='utf8'))
print(name, '买到一张票')
else:
print(name, '没票了')


def task(name, ML):

select(name)
ML.acquire()
buy(name)
ML.release()


if __name__ == '__main__':
ML = Lock()

L = []
for i in range(10):
p = Process(target=task, args=('路人%s' % i, ML))
L.append(p)

for i in L:
i.start()


输出:


路人0 正在查询剩余票数。。。。
路人1 正在查询剩余票数。。。。
路人2 正在查询剩余票数。。。。
路人3 正在查询剩余票数。。。。
路人4 正在查询剩余票数。。。。
路人6 正在查询剩余票数。。。。
路人5 正在查询剩余票数。。。。
路人7 正在查询剩余票数。。。。
路人8 正在查询剩余票数。。。。
路人9 正在查询剩余票数。。。。
路人0 查询到还有3张票!
路人0 正在买票。。。。。
路人1 查询到还有3张票!
路人2 查询到还有3张票!
路人3 查询到还有3张票!
路人4 查询到还有3张票!
路人6 查询到还有3张票!
路人5 查询到还有3张票!
路人7 查询到还有3张票!
路人8 查询到还有3张票!
路人9 查询到还有3张票!
路人0 买到一张票
路人1 正在买票。。。。。
路人1 买到一张票
路人2 正在买票。。。。。
路人2 买到一张票
路人3 正在买票。。。。。
路人3 没票了
路人4 正在买票。。。。。
路人4 没票了
路人6 正在买票。。。。。
路人6 没票了
路人5 正在买票。。。。。
路人5 没票了
路人7 正在买票。。。。。
路人7 没票了
路人8 正在买票。。。。。
路人8 没票了
路人9 正在买票。。。。。
路人9 没票了

posted @ 2018-06-16 17:01  beallaliu  阅读(93)  评论(0编辑  收藏  举报