Other articles


  1. redis集群搭建

    Table of Contents

    参考资料

    Redis 集群是一个提供在多个Redis间*节点间共享数据*的程序集

    准备

    集群开始需要运行redis集群实例,而且要让集群正常运作至少需要三个主节点,这里创建六个节点,三个为主节点,三个为从节点,端口号分别为9001,9002,9003,9004,9005,9006

    并创建六个以端口号为名字的目录, 在每个目录中运行一个Redis实例

    mkdir -p redis/9001
    cd redis
    mkdir 9002
    mkdir 9003
    mkdir 9004
    mkdir 9005
    mkdir 9006
    

    然后将对应的配置*redis.conf*放入相应的目录中(记得修改端口号)

    最小配置选项:

      port 9001 …

    read more

    There are comments.

  2. tornado中session实现

    tornado中默认没有session的实现,虽然默认的set_secure_cookie 已经足够安全了,但更安全的应该是客户端保存session_id,服务端保存对应的信息

    注:保存在redis中的经测试是可以的,保存在内存中的貌似还不行

    给出源码:

    from uuid import uuid4
    from redis import StrictRedis
    from functools import wraps
    from datetime import datetime, timedelta
    from pytz import timezone
    
    
    def singleton(cls):
        instances = {}
    
        @wraps(cls)
        def getinstance(*args, **kw):
            if cls not in instances:
                instances[cls] = cls …
    read more

    There are comments.

  3. 手机与Linux桌面文件共享

    手机: 某米 电脑: archlinux 环境: 同一wifi下

    手机共享文件到电脑

    最近才发现手机可以开启ftp服务对文件进行共享,直接进入文件管理器开启就行,电脑上使用

      ftp target
    
    进行连接

    注:get 下载put 上传

    电脑共享文件到手机

    这里采用python搭建一个简单的web服务(python3)供手机下载文件

      # 首先 cd 到要共享的目录
      python -m http.server --bind 0.0.0.0
    

    查看本机IP

      ifconfig
      # 或者
      ip addr
    

    重要: 请确保关闭防火墙,否则手机无法连接

      sudo systemctl …

    read more

    There are comments.

  4. 一个简单的数据分组算法

    Table of Contents

    之前有这么一个需求

    将数据按照时间分组,比如说每5分钟为一组,或者每30分钟为一组,开始时间如果分钟数大于等于30分钟,则设置为30,如果小于30,则设置为0(也可以设置为更复杂的逻辑)

    当然中间还有一些数据的统计,分析和计算暂时不管

    获取开始时间

    def get_start_date(start_date):
        time = datetime.fromtimestamp(int(start_date) / 1000)
        if time.minute >= 30:
            minute = 30
        else:
            minute = 0
        start_date = datetime(time.year, time.month, time.day, time.hour, minute,
                              0)
        start_date = mktime …
    read more

    There are comments.

  5. Linux总结(草稿)

    Linux发展历史

    Linux是由BSD发展而来,BSD又起源于UNIX。UNIX由贝尔实验室开发, 后来开放给各大学教学使用,其中伯克利大学通过对UNIX源码的研究以及不断的改进与扩展, 推出BSD,并于BSD 4.3版本加入网络模块,极大推进UNIX的发展。但后面由于版权等原因, UNIX与BSD之间发生冲突与法律纠纷,直到1998年,在此期间,芬兰大学生Linus Torvalds 于1991年发布首个Linux版本,linux也趁UNIX与BSD纠纷之际,得到非常快速的发展

    Linux的最小组成

    Linux最小由内核kernel,文件层次结构FHS,系统启动器bootloader组成,其中内存调度, 进程调度等由内核管理,内核可单独运行,但需要与其它组成相配合。

    语言:一般有头文件与库文件,头文件为实现,库文件为声明

    Linux的安装与启动

    当linux启动时,首先启动内核,内核调用init来完成引导进程,init启动时,它会在/etc/inittab内查找默认的运行级别, 然后运行/etc/rc …

    read more

    There are comments.

  6. celery动态添加任务

    celery是一个基于Python的分布式调度系统,文档在这 ,最近有个需求,想要动态的添加任务而不用重启celery服务,找了一圈没找到什么好办法(也有可能是文档没看仔细),所以只能自己实现囉

    为celery动态添加任务,首先我想到的是传递一个函数进去,让某个特定任务去执行这个传递过去的函数,就像这样

    @app.task
    def execute(func, *args, **kwargs):
        return func(*args, **kwargs)
    

    很可惜,会出现这样的错误

    kombu.exceptions.EncodeError: Object of type 'function' is not JSON serializable
    

    换一种序列化方式

    @app.task(serializer='pickle')
    def execute(func, *args, **kwargs):
        return func(*args, **kwargs …

    read more

    There are comments.