我是靠谱客的博主 执着楼房,最近开发中收集的这篇文章主要介绍python 使用 fcntl 实现锁操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

为什么80%的码农都做不了架构师?>>>   hot3.png

#!/usr/bin/env python
#encoding: utf8

import sys, os, time
import fcntl,errno
import struct

class LockException(Exception):
    pass

lock_dir = '/tmp'

def lock(lock_name, timeout=0, mode=0600):
    def decorator(func):
        def wrapper(*args, **kwargs):
            old_umask = os.umask(0)
            try:
                lock_file = os.path.join(lock_dir, '.%s.lck' % lock_name)
                lock_fd = os.open(lock_file, os.O_CREAT|os.O_WRONLY, mode)
                os.umask(old_umask)
            except OSError, e:
                os.umask(old_umask)
                raise LockException("lock error: %s" % e)

            lock_flags = fcntl.LOCK_EX
            if timeout is not None:
                lock_flags |= fcntl.LOCK_NB

            start_time = time.time()
            while True:
                try:
                    fcntl.lockf(lock_fd, lock_flags)
                    break
                except IOError, e:
                    if e.errno == errno.EAGAIN and time.time() < (start_time + timeout):
                        time.sleep(0.05)
                    else:
                        raise LockException("Lock error:%s", e)
            try:
                return func(*args, **kwargs)
            finally:
                fcntl.lockf(lock_fd, fcntl.LOCK_UN);
        return wrapper
    return decorator


@lock("test", timeout=10, mode=0666)
def LockFunc():
    print "lockRun..."

if __name__ == "__main__":
    LockFunc()

 

转载于:https://my.oschina.net/tsh/blog/1527569

最后

以上就是执着楼房为你收集整理的python 使用 fcntl 实现锁操作的全部内容,希望文章能够帮你解决python 使用 fcntl 实现锁操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部