飘逸专题

Ceph入门到精通-ceph经典盘符飘逸问题处理步骤

在Ceph存储系统中,"盘符飘逸"通常指的是Ceph OSD(Object Storage Daemon)使用的磁盘在系统重启后没有被正确挂载或识别。这可能是由于多种原因造成的,例如磁盘连接问题、驱动问题或配置错误。以下是解决此问题的步骤: 确认磁盘状态: 使用lsblk或fdisk -l命令来检查磁盘的状态和分区信息。 检查Ceph OSD状态: 使用ceph osd tree命令查看所有

飘逸的python - 对字典diff(异或)

在游戏中,我要监控记录物品系统中的背包变动情况。("异或"的结果是相同的消除,剩下不同的,即变动的) 假设背包的存储结构是这样的。 是一个字典,{物品id:数量}。 在背包类初始化的时候,把背包物品信息copy保存到一个oldbag变量,进行一些物品操作后(比如使用物品,领取物品奖励等),在调用save()方法存进redis时,对新的bag字典与oldbag字典进行差异对比就得出

飘逸的python - 理解打开文件的模式

当我们用open()函数去打开文件的时候,有好几种打开的模式。 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建。 'a'->追加,写到文件末尾 'b'->二进制模式,比如打开图像、音频、word文件。 '+'->更新(可读可写) 这个带'+'号的有点难以理解,上代码感受下。 with open('foo.txt

飘逸的python - 编码杂症之在字符串前面加u

有时候我们从其它地方接受的字符串经过艰难跋涉,它变了个样。比如收到的是'\u6253\u602a\u8005'而不是u'\u6253\u602a\u8005'。 明明肉眼看起来只需要加个u,但是怎么加呢? >>s = '\u6253\u602a\u8005' >>s '\\u6253\\u602a\\u8005' >>'u'+s 'u\\u6253\\u60

飘逸的python - 发送带各种类型附件的邮件

上一篇博文演示了如何发送简单的邮件,这一篇将演示如何发送各种类型的附件。 基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分。如果是附件,则add_header加入附件的声明。 在python中,MIME的这些对象的继承关系如下。 MIMEBase     |-- MIMENonMultipart         |-- MIM

飘逸的python - 发送qq邮件

之前在搞监控预警的时候需要发邮件通知,很简单,就跟呼吸一样。 import smtplibfrom email.mime.text import MIMEText_user = "sigeken@qq.com"_pwd = "***"_to = "402363522@qq.com"#使用MIMEText构造符合smtp协议的header及bodymsg = MIMEText(

飘逸的python - 灵活的动态之xxxattr

标题的xxxattr指的是hasattr/getattr/setattr/delattr。 可以动态的检测、获取、设置、删除对象的属性和方法。 这里所说的动态,说白了就是“可以通过字符串来做这些事”。 这是一个非常强大灵活的特性。 我举个例子。 有个GM工具来设置玩家角色的属性,比如角色的属性有经验、体力、游戏币。 roletable = {'3

飘逸的python - 多条件排序及itemgetter的应用

曾经客户端的同事用as写一大堆代码来排序,在得知python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣。 之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球,再相同按进球数,再相同按失球数。 即按积分P、净胜球GD、进球GS、失球GA这样的顺序。 在python中,排序非常方便,排序的参数主要有key、reverse。参数cmp不建议使用了,在pyth

飘逸的python - @staticmethod和@classmethod的作用与区别

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。 这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。 既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢 从它们的使用上

飘逸的python - super()只不过是用来避免硬编码的

当在子类需要调用父类的方法时,在python2.2之前,直接用类名调用类的方法,即非绑定的类方法,并把自身对象self作参数传进去。 class A(object):def say(self):print 'I am A'class B(A):def say(self):print 'I am B'A.say(self)b = B()b.say() 输出 I am B I a

飘逸的python - 简明gzip模块压缩教程

压缩数据创建gzip文件 先看一个略麻烦的做法 import StringIO,gzipcontent = 'Life is short.I use python'zbuf = StringIO.StringIO()zfile = gzip.GzipFile(mode='wb', compresslevel=9, fileobj=zbuf)zfile.write(content)zfi

飘逸的python - 字符串的KMP匹配算法

首先我们来看一下字符串的朴素匹配. 可以想象成把文本串s固定住,模式串p从s最左边开始对齐,如果对齐的部分完全一样,则匹配成功,失败则将模式串p整体往右移1位,继续检查对齐部分,如此反复. #朴素匹配def naive_match(s, p):m = len(s); n = len(p)for i in range(m-n+1):#起始指针iif s[i:i+n] == p:retu

飘逸的python - 不使用关键字,求和1+2+…+n

根据题意,我们不能用到if/else/for/while等关键字. --------------思考中------------ 思路: 1.用递归实现循环 2.递归的终止条件不用if怎么判断呢?  答案是字典,其中用not not n来把数字n转成bool. 上代码: def sum_(n):return n + {True:lambda:sum_(n-1),Fa

飘逸的python - 带权随机算法及在抽奖中的应用

带权随机在游戏开发中重度使用,各种抽奖和爆装备等. 运营根据需要来配置各个物品出现的概率. 今天要说的这个带权随机算法思想很简单,就是"把所有物品根据其权重构成一个个区间,权重大的区间大.可以想象成一个饼图.  然后,扔骰子,看落在哪个区间," 举个栗子,有个年终抽奖,物品是iphone/ipad/itouch. 主办方配置的权重是[('iphone', 10), ('ipad', 40)

飘逸的python - 实现控制台进度条效果

我们要怎么在同一行中刷新输出呢? 答案是回车。 注意,回车跟换行不是同一个东西。 回车:将当前光标移动到行首。(\r, return, CR, Carriage Return) 换行:光标位置不变,换到下一行。(\n, newline, LF, Line Feed) 以前的存储器很贵,有的人觉得每行结尾加2个字符太浪费了,加一个就行。于是导致了各个系统下表达回车换行所用符号略有不同

飘逸的python - 什么是魔术方法(magic method)

我们经常看到各种被双下划线环绕的方法,如__init__,它们就是魔术方法. 魔术方法是python语言预定好的"协议",不同魔术方法在不同场景下,会被隐式调用.我们通过重载这些方法,从而操控各种行为. class A(object):def __str__(self):return "I am A,2333"def __len__(self):return 42a = A()pr

飘逸的python - 实现一个极简的优先队列

一个队列至少满足2个方法,put和get. 借助最小堆来实现. 这里按"值越大优先级越高"的顺序. #coding=utf-8from heapq import heappush, heappopclass PriorityQueue:def __init__(self):self._queue = []def put(self, item, priority):heappush(s

飘逸的python - 一个极简的event系统

event系统的核心至少满足: 1.存放事件的容器,可对事件添加删除 2.事件的触发fire 上代码. class Event(list):def __call__(self, *args, **kwargs):for f in self:f(*args, **kwargs)def f(arg): print 'execute with arg',arge = Event(

飘逸的python - 实现一个pretty函数漂亮的输出嵌套字典

示例: d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } } 美观输出是: 观察一下特点: 1.同一lev

飘逸的python - 装饰器的本质

很多人把装饰器搞的很复杂,其实本质很简单. 首先,什么是装饰器呢?在代码中发现戴着@xxx帽子的,就是装饰器. 那要怎么自己定义一个装饰器呢? 其实任何一个接收一个参数的callable都可以用来做装饰器,比如函数和类.为方便起见,下面的例子都用函数来说明. def deco(func):return 1 这里,deco就可以做装饰器. @decodef f(args):

NotOnlySuccess大神的飘逸版线段树

吐槽:在模板题,我的丑陋的线段树跑了984ms,而大神的只跑了364ms,看来我的代码还是太丑了QAQ 大神的线段树也没什么大优化,就是不知道为什么超级快,或许是我以前看的线段树代码不好吧。。。 我推荐这个线段树的主要原因就是非常好写,空间也是非常小,思路极其清晰。 好了,废话不多说,直接上代码: #include<bits/stdc++.h>#define ll long long

机器人走路未必笨拙,DeepMind新方法训练的人工智能走得就很飘逸

雷锋网(公众号:雷锋网) AI 科技评论按:无论是在树木间乱窜的猴子,还是躲避对手和进击目标的足球运动员,他们灵活敏捷的速度,都让人十分惊叹。掌握这种复杂的电机控制是物理智能研究的方向,是 AI 研究的重要组成部分。 真正的智能电机需要在一系列复杂的环境中,学习如何调节控制身体使其更加灵活来完成任务。目前,很多领域开始研究如何控制模拟人,包括计算机动画和生物力学领域。智能电机的另一种发展趋势是