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)





目录
相关文章
|
1月前
|
Java
SpringBoot 接口并发限制(Semaphore)
SpringBoot 接口并发限制(Semaphore)
52 1
|
1月前
|
容器
Quartz 简单使用
Quartz 简单使用
18 0
|
3月前
|
安全 Java C语言
【学习笔记 time:】 CAS底层原理分析(AtomicInteger,atomicStampedReference使用)
【学习笔记 time:】 CAS底层原理分析(AtomicInteger,atomicStampedReference使用)
16 0
|
4月前
|
NoSQL Redis
Redis - Redisson lock和tryLock原理解析
Redis - Redisson lock和tryLock原理解析
342 0
|
缓存 NoSQL Java
SpringBoot定时任务@Scheduled的多线程使用
@Scheduled是Spring框架中的一个注解,它可以用于配置定时任务,使得方法可以按照规定的时间间隔定时执行。在使用该注解时,我们可以指定任务的执行时间、循环周期、并发数等参数,从而实现定时任务的功能。在Spring Boot中,@Scheduled注解可以直接应用于方法上。
431 0
quartz学习笔记6:多线程
quartz学习笔记6:多线程
75 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(四)
quartz学习笔记5:update
quartz学习笔记5:update
70 0
quartz学习笔记-core
quartz学习笔记-core
76 0
quartz学习笔记7:trading
quartz学习笔记7:trading
72 0