为什么80%的码农都做不了架构师?>>>
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54#!/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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复