Python课程设计 第 37 / 52 篇
进程并发
Chapter22
任务名称 - 进程并发
任务简介
- 理解进程的本质并学会使用文章中讲到的Linux命令
- 理解并发的工作原理
- 学会开启进程的两种方式
- 理解守护进程互斥锁的应用
- 理解IPC机制的条件和通讯方式
- 能够熟练使用生产者消费者模型
社群话题
Python怎么实现进程间的通信的
详细说明
进程是计算机最小的资源单位
打卡要求
- 写一个模拟100个用户抢10张火车票的程序,要求如下:
1 100个用户一定是并发查看票数余量,购票当然也是并发执行的
2 用户在购票时模拟网络延迟,可能查票的时候有票,但是购票的时候就没有了
3 进程之间的通信使用硬盘来完成
4 不能出现数据错误,比如多个用户买同一张票,购票成功却票数没减
5 不需要写用户的登录注册
import json
import time
import random
import os
from multiprocessing import Process, Lock
mutex = Lock()
# 互斥锁vs join的区别二:
# 互斥锁可以让一部分代码(修改共享数据的代码)串行,而join只能将代码整体串行
def search():
time.sleep(random.randint(1, 3))
with open('db.json', 'r', encoding='utf-8') as f:
dic = json.load(f)
print('%s 剩余票数:%s' % (os.getpid(), dic['count']))
def get():
with open('db.json', 'r', encoding='utf-8') as f:
dic = json.load(f)
if dic['count'] > 0:
dic['count'] -= 1
time.sleep(random.randint(1, 3))
with open('db.json', 'w', encoding='utf-8') as f:
json.dump(dic, f)
print('%s 购票成功' % os.getpid())
def task(lock):
search()
lock.acquire()
get()
lock.release()
if __name__ == '__main__':
for i in range(10):
p = Process(target=task, args=(mutex,))
p.start()
- 基于网络通信写一个用户注册的程序,要求如下:
1 用户在客户端注册时,服务器会给用户的客户端发送一个随机验证码,用户使用它校验。
2 多个用户并发执行注册功能时服务端使用消息队列来处理用户请求
作业打卡截至时间:9.29日