python运行超时设置


import signal

class TimeoutError(Exception):
    pass

def timeout(seconds=10, error_message="Timer expired"):
    def _timeout(func):
        def _handle_timeout(signum, frame):
            raise TimeoutError(error_message)

        def wrapper(*args, **kwargs):
            signal.signal(signal.SIGALRM, _handle_timeout)
            signal.alarm(seconds)
            try:
                result = func(*args, **kwargs)
            finally:
                signal.alarm(0)
            return result

        return wrapper

    return _timeout

There are comments.

  • 一个很好的想法


    我有这样一个想法

    有这么一个app

    1. 它可以自定义表单,然后保存到本地或者远程数据库
    2. 还可以填写一个远程url,验证的token,或者其他验证需要的header信息
    3. 填好之后就可以提交相关的表单

    好吧,其实是写说说,写博客使用的

    它还有另外一个功能: 上传图片

    1. 同样是先填写远程url,验证信息
    2. 填写其它相关信息
    3. 选择本地图片进行上传
    4. 上传成功后返回相应的url链接

    好吧,越来越像朋友圈和QQ空间了

    但是,它可以自定义发布和上传的url呀!

    最后,如果要更大,更远一些,可以对使用者的博客等内容进行相应的聚合,分类,成为一个优质的移动聚合平台.

    嗯,好想法,就等谁实现了

  • 为pelican增加上一篇下一篇功能


    功能实现很简单, pelican也有类似的插件实现 https://github.com/getpelican/pelican-plugins/tree/master/neighbors

    不过自己实现起来更爽不是吗? 而且类似prev_article_in_categoryprev_article_in_subcategory的功能我并不需要

    首先参考pelican的文档,基础实现

    def add_neighbors(generator):
        ....
    
    def register():
        signals.article_generator_finalized.connect(add_neighbors)
    

    然后在generator.articles列表上进行操作,为article增加previous_articlenext_article对象

    先进行排序(按时间)

    articles = generator.articles
    articles.sort(key=(lambda x …

  • 时间format输出格式参考


    date --help

    %%一个文字的 %
    %a当前locale 的星期名缩写(例如: 日,代表星期日)
    %A当前locale 的星期名全称 (如:星期日)
    %b当前locale 的月名缩写 (如:一,代表一月)
    %B当前locale 的月名全称 (如:一月)
    %c当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
    %C世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
    %d按月计的日期(例如:01)
    %D按月计的日期;等于%m …
  • lua中匪夷所思的table长度


    s = { 1, 2, 3, 4, 5, 6 }
    print(#s)     -- output: 6
    s[4] = nil
    print(#s)     -- output: 6
    s[7] = nil
    print(#s)     -- output: 3
    s[4] = 4
    print(#s)     -- output: 6
    s[4] = nil
    print(#s)     -- output: 3
    
    print()
    
    s = { "1", "2", "3", "4", "5", "6" }
    print(#s …
  • ansible快速部署加速方案


    ansible是基于Python的 自动化部署 方案,但是目前只是通过命令行

    ansible -i hosts all -a 'uptime'
    # or
    ansible-playbook -i hosts playbook.yml -e 'args' -t deploy
    
    实现自动化部署.

    长此以往,虽然可以实现所谓的自动化,但产品业务线多且杂的情况下,项目很难维护,更不用说以文件为存储的表现形式很差,针对目前使用ansible的经验以及使用中的困难,可以针对性的提出一些解决方案

    加速

    问题

    自动化部署其中最大的障碍就是 网络 的原因

    其中需要通过网络上传一些模板文件,有的甚至还需要上传一些压缩包,虽然说几MB的东西很快就能上传成功,但如果把这上传文件所需要的2秒乘以上百,上千台主机呢,更不用说ansible的表现形式就是一个任务一个任务的往下执行,假如在上传模板这一步卡住 …

  • ansible-playbook中tasks单进程


    之前有一个需求,ansible-playbook中需要某一步单步执行,也就是说在有多台服务器时,某个任务只能一台服务器执行完后,另一台服务器才能执行,否者对应集群的服务会出问题

    这是一个很简单的需求,ansible中也有对应的实现, --fork 1 或者 使用 serial

    但是如果有人忘记加 --fork 1 了呢,而且该任务是在子任务中,使用 include 加载, serial 关键字无法在某一特定任务中使用,只能与 hosts 同级

    所幸,在这里 https://www.bountysource.com/issues/26342862-support-for-serial-on-an-individual-task 找到了解决办法,使用 delegate_to

    - name: service restart
      # serial: 1 would be the proper solution here, but …
  • 那里有座山


    这里有座山
    那里有座山
    你在那里
    我在这里

    我们都有着自己的骄傲
    谁都不想为谁低头

    这里有座山
    那里有座山
    至少
    我还可以远远的看到你

    你在那里
    你在哪里
    而我
    一直都在这里

    一直都在这里