原因: 加锁降低了程序的效率,让原来能够同时执行的代码变成顺序执行了,异步变同步的过程
# coding=utf-8
import json
import logging
import multiprocessing
import time
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(message)s"
)
def search ():
with open("ticket.json") as f:
dic = json.load(f)
return dic['count']
def get_ticket (lock, person):
with lock:
with open("ticket.json") as f:
dic = json.load(f)
logging.info(f"{person}查询余票:{dic['count']}")
time.sleep(0.2) # 模拟网络延迟
if dic['count'] > 0:
dic['count'] -= 1 # 买到票,数量减1
time.sleep(0.2) # 模拟网络延迟
with open('ticket.json', 'w') as f:
json.dump(dic, f) # 把剩余票数写回文件
logging.info(f'{person}买到票了')
else:
logging.info(f'{person}没买到票')
def main (ctx):
logging.info('\033[31m--------------售票开始...\033[0m')
lock = ctx.Lock()
ps = [ctx.Process(target=get_ticket, args=(lock, "person-%s" % i)) for i in range(1, 16)]
[p.start() for p in ps]
[p.join() for p in ps]
logging.info('\033[31m--------------售票结束...\033[0m')
if __name__ == '__main__':
# windows 启动方式
multiprocessing.set_start_method('spawn')
# 获取上下文
ctx = multiprocessing.get_context('spawn')
# 检查这是否是冻结的可执行文件中的伪分支进程。
ctx.freeze_support()
main(ctx)
输出:
2019-10-06 19:22:33,371 --------------售票开始...
2019-10-06 19:22:33,787 person-6查询余票:10
2019-10-06 19:22:34,202 person-6买到票了
2019-10-06 19:22:34,203 person-4查询余票:9
2019-10-06 19:22:34,613 person-4买到票了
2019-10-06 19:22:34,614 person-13查询余票:8
2019-10-06 19:22:35,017 person-13买到票了
2019-10-06 19:22:35,018 person-8查询余票:7
2019-10-06 19:22:35,419 person-8买到票了
2019-10-06 19:22:35,421 person-12查询余票:6
2019-10-06 19:22:35,826 person-12买到票了
2019-10-06 19:22:35,827 person-1查询余票:5
2019-10-06 19:22:36,229 person-1买到票了
2019-10-06 19:22:36,231 person-11查询余票:4
2019-10-06 19:22:36,632 person-11买到票了
2019-10-06 19:22:36,632 person-7查询余票:3
2019-10-06 19:22:37,034 person-7买到票了
2019-10-06 19:22:37,035 person-10查询余票:2
2019-10-06 19:22:37,438 person-10买到票了
2019-10-06 19:22:37,439 person-2查询余票:1
2019-10-06 19:22:37,841 person-2买到票了
2019-10-06 19:22:37,842 person-9查询余票:0
2019-10-06 19:22:38,043 person-9没买到票
2019-10-06 19:22:38,043 person-5查询余票:0
2019-10-06 19:22:38,244 person-5没买到票
2019-10-06 19:22:38,244 person-3查询余票:0
2019-10-06 19:22:38,445 person-3没买到票
2019-10-06 19:22:38,447 person-15查询余票:0
2019-10-06 19:22:38,647 person-15没买到票
2019-10-06 19:22:38,647 person-14查询余票:0
2019-10-06 19:22:38,848 person-14没买到票
2019-10-06 19:22:38,872 --------------售票结束...
217

被折叠的 条评论
为什么被折叠?



