vagrant + centos7创建3节点集群

vagrant + centos7创建3节点集群 坑 设置节点的网络的时候,需要给一个属性name​,确保节点启动的时候,集群里面的节点会绑定到同一个网络平面:...

January 15, 2023 · 1 min · LingZihuan

Argparse Entrance Like Click

使用python argparse实现简单的click python3 argparse 文档 python3 ArgParse教程 需求 实现一个类似click command的类,支持将函数作为命令注册进去,调用这个类的时候,解析命令行参数,执行对应的注册函数。 可以用装饰器的方法进行函数注册以及参数添加 类名: Entrance 方法: 注册: Entrance.register 参数:Entrance.option 实现 entrance.py # encoding: utf-8 """the only entrance for the program""" import argparse class EntranceConflict(Exception): pass class Entrance: def __init__(self): self.parser = argparse.ArgumentParser() self.sub_parser = self.parser.add_subparsers() self.entrances = {} def register(self, name=None): """ 注册一个函数作为入口 可以指定name,否则默认使用函数的名字 """ def decorator(f): entrance_name = name or f....

September 19, 2022 · 2 min · LingZihuan

使用mongodb自带的ObjectID获取记录生成时间

有些时候,我们在写入mongo数据的时候,可能需要记录这条数据的插入时间,我们一般情况下回给记录增加一个 create_time。 实际上,如果我们插入的数据含有 ObjectId 的话,那么其实这个id是包含了生成时间的,同时也可以作为记录的主键,一举多得。 以python为例,我们有这样一条记录: document = { "_id": ObjectId("5dfc8ac5d3fa12967b8888ec"), "user": "mike", "age": 19, } 这时候,我们可以使用ObjectId自带的generation_time属性,获取这条记录的插入时间: time = ObjectId("5dfc8ac5d3fa12967b8888ec").generation_time print(time) 输出: datetime.datetime(2019, 12, 20, 8, 48, 5, tzinfo=<bson.tz_util.FixedOffset object at 0x7f874030f9a0>) 需要注意到的是,里面的时区信息,显示的是一个 FixedOffset,即固定偏移,我们看 generation_time 属性的定义: utc = FixedOffset(0, "UTC") """Fixed offset timezone representing UTC.""" class ObjectId(object): # ... 省略其他代码 ... @property def generation_time(self): """A :class:`datetime.datetime` instance representing the time of generation for this :class:`ObjectId`....

June 1, 2022 · 1 min · LingZihuan

使用Pip Tools生成好看的依赖文件

项目地址: https://pypi.org/project/pip-tools/ pip-tools 是一个命令行工具集合,主要有两个命令: pip-compile,pip-sync,现在主要用的是 pip-compile 在写python项目的时候,我们通常会依赖到其他的包,比如写一个后端的服务,我们可能会依赖到flask/pymysql这些基础的包,随着开发的进行,我们还可能会引入更多的依赖。 这些python依赖包构成了一个完整的服务,开发完成后,我们将这些服务部署到服务器上时,只需要安装好对应的依赖,便可以直接运行服务。 但是,如果我们不将生产环境的依赖固定下来的话,整个服务可能会因为某一次服务更新,其中某个的更新带来的不兼容导致整个服务崩溃。比如pyjwt,在1.7.1版本之前生成的jwt-token是一个bytes类型,我们将其转换成为字符串需要使用到decode()方法。但是在更新到2.0之后,生成的jwt-token是一个字符串类型,如果我们对其再调用decode方法的话,就会发生错误。 这就显现出了固定依赖的重要性了。 通常,固定依赖,我们可以在开发环境使用 pip freeze命令,直接将开发环境的所有版本固定下来到一个 requirements.txt 文件里面,这是懒人做法,当然也很有效。但是文件里面会带有一些系统的依赖版本,比如urllib 之类的,这些我们是不需要再次安装的,所以,如果这些依赖出现在 requirements.txt 文件里面,就会显得不那么干净。 这时,我们可以使用 pip-tools里面的 pip-compile 工具,对依赖进行编译,生成一份漂亮的依赖文件。 直接生成最新依赖 首先,我们将项目中直接依赖的包写到requirements.in文件里面 requirements.in pymysql flask 使用 pip-compile 自动使用最新依赖版本生成依赖文件 命令: pip-compile, 输出requirements.txt文件: requirements.txt # # This file is autogenerated by pip-compile with python 3.8 # To update, run: # # pip-compile # --index-url https://pypi.doubanio.com/simple --trusted-host pypi.doubanio.com click==8.1.3 # via flask flask==2.1.2 # via -r requirements....

May 24, 2022 · 1 min · LingZihuan

HTML a标签下载json数据

假如我们有一个json文件:example.json,我们想要将这个文件的连接放到网站上提供下载。 在HTML中这样写: <a href="http://lingzihuan.icu/leetcode-submissions.json">点击下载</a> 点击下载 当我们点击链接的时候,chrome浏览器会自动打开一个页面,然后将json文件的内容加载进来,但是,当我们想要将文件下载到本地的时候,还得自己右键点击,然后选择”另存为“。 看过 Stack Overflow 上的提示,看到可以给其设定 download属性: <a href="http://lingzihuan.icu/leetcode-submissions.json" download>点击下载</a> 点击下载 需要注意的是,href里面的内容需要是与当前网页同源的url才可使用。

May 9, 2022 · 1 min · LingZihuan