/image/avatar.png

python中使用优先队列

相信对于队列的概念大家都不会陌生,这种先入先出的数据结构应用很广泛,像一般的生产消费都会用到队列,关于Queue的用法介绍可以参考我之前的文章 python中的Queue与多进程(multiprocessing)还有栈,栈是一种先入后出的数据结构,面优先队列有别于普通的队列与栈,在实现上,它一般通过堆这一数据结构,而堆其实是一种完全二叉树,它会对进入容器的元素进行排序(根据事先指定的规则),出队的顺序则会是二叉树的根结点代表的元素。接下来介绍几种优先队列的实现。

python中使用加盐哈希函数加密密码

开发网站离不开用户的注册与登录,今天来说说在网站开发的时候关于用户密码的保存方式,传统的方式有以下几种

  • 明文存储:肉眼就可以识别,没有任何安全性。 谁用谁傻缺
  • 加密存储:通过一定的变换形式,使得密码原文不易被识别。密码加密的几类方式:
  1. 明文转码加密:BASE64, 7BIT等,这种方式只是个障眼法,不是真正的加密。

  2. 对称算法加密:DES, RSA等。

  3. 签名算法加密:也可以理解为单向哈希加密,比如MD5, SHA1等。加密算法固定,容 易被暴力破解。如果密码相同,得到的哈希值是一样的。

  4. 加盐哈希加密:加密时混入一段“随机”字符串(盐值)再进行哈希加密。即使 密码相同,如果盐值不同,那么哈希值也是不一样的。现在网站开发中主要是运 用这种加密方法

本篇文章主要介绍第四种 「加盐哈希加密」

python中的异步实践与tornado应用

最近项目中由于在python3中使用tornado,之前也有用过,是在python2中,由于对于协程理解不是很透彻,只是套用官方文档中的写法,最近比较细致的看了下协程的用法,也将tornado在python3中异步的实践了一下。

别小看元组

元组(tuple)和列表(list),每个写python的都知道,而且都知道,元组是不可变的,但是仅仅因为一个不可变就要创造出一个新的数据类型吗? 答案肯定不是,那么我们来看看元组究竟有哪些用法

python中关于map,lambda,高阶函数与装饰器的使用

有一点python基础的朋友在看到一些老鸟写的一些函数的时候,他们会有意的写出一些高阶函数,要么带个map啊,要么带个lambda呀,再高一点的带个@装饰器啊,其它这些也没有什么难的,用法上高级一些,如果能捋顺它的逻辑,准确的在实际应用中使用,还是会给程序效率上带来一定的提高,至于可读性,当你习惯了这些用法时你就会觉得它的可读性也很好,之所以你不习惯,主要还是由于你不懂它的用法,说到可读性,这是另外的话题,以后再详细的聊聊,今天要说的主要是高阶函数与装饰器的使用。希望看完此篇文章的朋友有所收获。

利用logging模块轻松地进行Python日志记录(转)

在开发过程中,如果程序运行出现了问题,我们是可以使用我们自己的 Debug 工具来检测到到底是哪一步出现了问题,如果出现了问题的话,是很容易排查的。但程序开发完成之后,我们会将它部署到生产环境中去,这时候代码相当于是在一个黑盒环境下运行的,我们只能看到其运行的效果,是不能直接看到代码运行过程中每一步的状态的。在这个环境下,运行过程中难免会在某个地方出现问题,甚至这个问题可能是我们开发过程中未曾遇到的问题,碰到这种情况应该怎么办? 如果我们现在只能得知当前问题的现象,而没有其他任何信息的话,如果我们想要解决掉这个问题的话,那么只能根据问题的现象来试图复现一下,然后再一步步去调试,这恐怕是很难的,很大的概率上我们是无法精准地复现这个问题的,而且 Debug 的过程也会耗费巨多的时间,这样一旦生产环境上出现了问题,修复就会变得非常棘手。但这如果我们当时有做日志记录的话,不论是正常运行还是出现报错,都有相关的时间记录,状态记录,错误记录等,那么这样我们就可以方便地追踪到在当时的运行过程中出现了怎样的状况,从而可以快速排查问题。 因此,日志记录是非常有必要的,任何一款软件如果没有标准的日志记录,都不能算作一个合格的软件。作为开发者,我们需要重视并做好日志记录过程。

配置多个ssh密钥对并且永久多ssh管理

这两天捣腾SSH,一直对其使用一知半解,由于要把博客迁移,弄来弄去发现还是部署到国内的coding吧 之前也弄过,但是由于重新安装了git-for-windows客户端,所以一开始用hexo d命令部署的时候报错了 趁着这次迁移也好好弄了一下本地的ssh管理,虽然还有些问题,但是至少比之前清晰一些了,这里也记录一下过程中遇到的问题