utils.py 文件源码

python
阅读 33 收藏 0 点赞 0 评论 0

项目:fabricio 作者: renskiy 项目源码 文件源码
def once_per_command(func=None, block=False, default=None):
    if func is None:
        return functools.partial(once_per_command, block=block, default=default)

    @functools.wraps(func)
    def _func(*args, **kwargs):
        lock = last_hash.get_lock()
        if lock.acquire(block):
            try:
                command = fab.env.command or ''
                infrastructure = fab.env.infrastructure or ''
                current_session = hashlib.md5()
                current_session.update(command.encode('utf-16be'))
                current_session.update(infrastructure.encode('utf-16be'))
                for host in fab.env.all_hosts:
                    current_session.update(host.encode('utf-16be'))
                current_hash = current_session.digest()
                if current_hash != last_hash.raw:
                    last_hash.raw = current_hash
                    return func(*args, **kwargs)
                return default
            finally:
                lock.release()

    last_hash = multiprocessing.Array(ctypes.c_char, hashlib.md5().digest_size)
    return _func
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号