进程对象通信 守护 互斥锁
进程对象通信 守护 互斥锁
查看当前进程号:
from multiprocessing import Process,current_process(导入进程和当前进程) import time import os
def task:
print ('%s is running'%current_process().pid)(查看当前进程的进程号)
time.sleep(3)
if __name__=='__main__': p=Process (target=task)因为不需要传值所以就不写后面的 p.start() print (主)
守护进程:
from multiprocessing import Process import time def task(name): print('%s总管正在活着',%name) time.sleep(3) print ('%s总管正在死亡',%name) if __name__==__main__: p=Process (target=task,args='egon',)) p.daemon=True将进程设置为守护进程,皇帝死 太监跟着死,这句要放在start前面 p.start() print ('皇帝寿终正寝')
互斥锁:不懂 Lock
多个进程操作同一份数据时,会出现数据错乱的问题,针对上述问题,解决方式就是加锁处理,将并发变成串行,牺牲了效率但是保证数据的安全
抢票功能:
from multiprocessing import Process,Lock impirt time import json 储存和交换文本信息会将json格式字符串转换为Python对象 import random 随机模块 1.查票 def search(i): 定义一个票 with open('data','r',encodinf='utf–8')as f: 文件操作读取票数r是文本模式只读,如果用rb是转为二进制会更麻烦 dic=json.load() 是读文件,这里不是直接操作数据,loads是直接传数据类型 print('用户%s查询余票:%s%(i,dic.get('tick_num))) 字典取值不要用[ ]的形式,推荐使用get,写的代码不能报错 买票:1.先查票再点击进去购买,点进去也无法保证一定有票,所以会再次查询票2.买票付款后才算购票成功 def buy(i): 先查票 with open('data','r',encoding='utf–8')as f: dic=json.load(f) 查票时也有网络延迟,但是延迟时间不固定所以需要导入一个随机模块来模仿: time.sleep(random(1,3)) 随机延迟1-3秒 判断是否有票 if dic.get('ticket_num')>0: dic['ticket_num']-=1 修改数据库 买票 with open('data','w',encoding='utf–8')as f:写入数据库 json.dump(dic,f) 把字典写入文件中 print('用户%s买票成功'%i) else: print(用户%s买票失败%i) 结合下来: def run(i,mutex): 接收他 search(i) 查票 给买票环节加锁: mutex.acquire()抢锁 buy(i) if__name__=='__main__': 在主进程中设置一把锁 让所有的子进程都来抢,谁抢到谁先买票 mutex=Lock () mutex是变量名 一把锁的意思 for i in range(1,11):开多个进程,顾头不顾尾 p=Process (target=task,args=('i',mutex))把锁传给子进程 p.start()
文件data:
{"ticket_num":1}
行锁:例如一个表格,有个人在处理其中一行,其他人就只能等着
表锁:有人在处理这个表的时候,这个表其他人用不了,也只能等着
进程间通信:在两个进程间挖一条管道:subprocess
mutex=Lock () mutex是变量名 一把锁的意思
mutex.acquire()抢锁
mutex.release释放锁
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南