2016年11月25日
Python 在 2.6 版本中新加了一个字符串格式化方法: str.format()。它的基本语法是通过 {} 和 : 来代替以前的 %.。格式化时的占位符语法:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
“映射”规则
通过位置
str.format() 可以接受不限个参数,位置可以不按顺序:
>>> "{0} {1}".format("hello", "world")
'hello world'
>>> "{} {}".forma...
阅读更多
2016年11月05日
Docker 在技术上实际并没有什么创新,而是整合了很多现有的技术。Docker 用到的核心技术包括 Namespace、CGroup、UnionFS 等等。
Namespace 简介
Namespace 是 Linux 提供的一种内核级别环境隔离的方法。其提供一种资源隔离方案,使得 PID, IPC ,Network 等系统资源不再是全局性的,而是属于特定的Namespace。每个 Namespace 里面的资源对其他 Namespace 都是透明的。
Unix 系统有一个 chroot 的系统调用,其一种简单的隔离模式,通过修改根目录把进程隔离到特定的目录下执行。Chroot ...
阅读更多
2016年11月05日
Docker 是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
Docker 应用场景
Web 应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
提供强大的安全保障,运行一个单独的进程与服务器隔离。
Docker 特征
速度飞快以及优雅的隔离框架
物美价廉
CPU/内存的低消耗
快速开/关机
跨云计算基础构架
D...
阅读更多
2016年11月03日
Docker 官方提供一个 registry 镜像来让需要的人自己搭建私有仓库。因此部署仓库的服务器需要有 Docker 环境。
简单部署
简单部署如下:
docker run -d -p 8855:5000 --name registry -v /home/server/registry/:/var/lib/registry registry
这默认是一个 http 的接口,但是 docker 客户端在 push 镜像时,默认会使用 https。为了避免搭建 https 时部署签名证书的麻烦,这里只介绍 http 接口的部署。那么,客户端要向服务器 push 镜像则需要做一...
阅读更多
2016年10月27日
tmpfs 是 Linux/Unix 系统上的一种基于内存的文件系统,即 tmpfs 使用内存或 swap 分区来存储文件。
Linux 内核中的 VM 子系统负责在后台管理虚拟内存资源 Virtual Memory,即 RAM 和 swap 资源,透明地将 RAM 页移动到交换分区或从交换分区到 RAM 页,tmpfs 文件系统需要 VM 子系统的页面来存储文件。tmpfs 自己并不知道这些页面是在交换分区还是在 RAM 中;做这种决定是 VM 子系统的工作。tmpfs 文件系统所知道的就是它正在使用某种形式的虚拟内存。
由于 tmpfs 是基于内存的,因此速度是相当快的。另外 t...
阅读更多
2016年10月27日
查询不重复的记录
SELECT 指令让我们能够读取表格中一个或数个栏位的所有资料。这将把所有的资料都抓出,无论资料值有无重复。在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况。换句话说,我们需要知道这个表格/栏位内有哪些不同的值,而每个值出现的次数并不重要。这要如何达成呢?在 SQL 中,这是很容易做到的。我们只要在 SELECT 后加上一个 DISTINCT 就可以了。DISTINCT 的语法如下:
SELECT DISTINCT "栏位名"
FROM "表格名";
如果指定多列,则同时根据多列的值里去重,如 (1, 1) 与 (1, 2) 为不重复的数据。
多个复杂...
阅读更多
2016年10月26日
Python 的 functools 模块可以说主要是为函数式编程而设计,用于增强函数功能。
functools.partial
用于创建一个偏函数,它用一些默认参数包装一个可调用对象,返回结果是可调用对象,并且可以像原始对象一样对待,这样可以简化函数调用。实际上 partial 相当于一个高阶函数,其大致的实现如下(实际在标准库中它是用 C 实现的):
def partial(func, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = keywords.copy()
...
阅读更多
2016年10月25日
import hook 通常被译为 探针。我们可以认为每当导入模块的时候,所触发的操作就是 import hook。使用 import 的 hook 机制可以让我们做很多事情,比如加载网络上的模块,在导入模块时对模块进行修改,自动安装缺失模块,上传审计信息,延迟加载等等。
理解 import hook 需要先了解 Python 导入模块的过程。
一、 导入过程
Python 通常使用 import 语句来实现类库的引用,当然内建的 __import__() 函数等都能实现。 import 语句负责做两件事:
查找模块
加载模块到当前名字空间
那么,一个模块的导入过程大致可以...
阅读更多