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.

  • 时间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 …
  • 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 …