概述
为什么80%的码农都做不了架构师?>>>
#!/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 实现锁操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复