quartz学习笔记4:lock

简介: quartz学习笔记4:lock
# coding: utf-8  
import os  
try:  
    import fcntl  
    LOCK_EX = fcntl.LOCK_EX  
except ImportError:  
    # 
    fcntl = None  
    import win32con  
    import win32file  
    import pywintypes  
    LOCK_EX = win32con.LOCKFILE_EXCLUSIVE_LOCK  
    overlapped = pywintypes.OVERLAPPED()
class Lock:  
    """
    """  
    def __init__(self, filename='processlock.txt'):  
        self.filename = filename  
        # 
        self.handle = open(filename, 'w')  
    def acquire(self):  
        # 
        if fcntl:  
            fcntl.flock(self.handle, LOCK_EX)  
        else:  
            hfile = win32file._get_osfhandle(self.handle.fileno())  
            win32file.LockFileEx(hfile, LOCK_EX, 0, -0x10000, overlapped)  
    def release(self):  
        # 
        if fcntl:  
            fcntl.flock(self.handle, fcntl.LOCK_UN)  
        else:  
            hfile = win32file._get_osfhandle(self.handle.fileno())  
            win32file.UnlockFileEx(hfile, 0, -0x10000, overlapped)  
    def __del__(self):  
        try:  
            self.handle.close()  
            os.remove(self.filename)  
        except:  
            pass  
if __name__ == '__main__':  
    # 
    import time  
    print 'Time: %s' % time.time()  
    lock = Lock()  
    try:  
        lock.acquire()  
        time.sleep(20)  
    finally:   
        lock.release()  
    print 'Time: %s' % time.time()  

#加锁,解锁


python 中给文件加锁——fcntl模块

import fcntl

打开一个文件

f = open('./test') ##当前目录下test文件要先存在,如果不存在会报错。


对该文件加密:

fcntl.flock(f,fcntl.LOCK_EX)

这样就对文件test加锁了,如果有其他进程对test文件加锁,则不能成功,会被阻塞,但不会退出程序。


解锁:fcntl.flock(f,fcntl.LOCK_UN)


fcntl模块:


flock() : flock(f, operation)


 operation : 包括:


   fcntl.LOCK_UN 解锁

   fcntl.LOCK_EX  排他锁

fcntl.LOCK_SH  共享锁

fcntl.LOCK_NB  非阻塞锁

LOCK_SH 共享锁:所有进程没有写访问权限,即使是加锁进程也没有。所有进程有读访问权限。


LOCK_EX 排他锁:除加锁进程外其他进程没有对已加锁文件读写访问权限。


LOCK_NB 非阻塞锁:


   如果指定此参数,函数不能获得文件锁就立即返回,否则,函数会等待获得文件锁。LOCK_NB可以同LOCK_SH或LOCK_NB进行按位或(|)运算操作。 fcnt.flock(f,fcntl.LOCK_EX|fcntl.LOCK_NB)





目录
相关文章
|
7月前
|
Java
Java中ReentrantLock中 lock.lock(),加锁源码分析
Java中ReentrantLock中 lock.lock(),加锁源码分析
53 0
|
7月前
|
安全 Java
【JAVA学习之路 | 提高篇】锁(Lock)
【JAVA学习之路 | 提高篇】锁(Lock)
|
Java Spring
[java]spring-task定时任务
[java]spring-task定时任务
78 0
|
存储 Java
一文带你理解Java中Lock的实现原理
当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。
9252 0
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile(四)
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile(四)
|
存储 安全 Java
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile(一)
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile(一)
|
缓存 索引
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile(三)
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile(三)
|
存储 Java 编译器
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile(二)
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile
《JUC并发编程 - 原理篇》Monitor | synchronized | wait&notify | join | park&unpark | 指令级并行 | volatile(二)
quartz学习笔记6:多线程
quartz学习笔记6:多线程
100 0
quartz学习笔记5:update
quartz学习笔记5:update
81 0