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)





目录
相关文章
|
5月前
|
Java 调度 Spring
SpringBoot多个@Scheduled注解的方法,会阻塞吗
【6月更文挑战第9天】SpringBoot多个@Scheduled注解的方法,会阻塞吗
573 5
|
编解码 Java 测试技术
日期类--JUnit--多线程基础--互斥锁
日期类--JUnit--多线程基础--互斥锁
84 0
|
存储 调度
Quartz-SchedulerListener解读
Quartz-SchedulerListener解读
131 0
|
XML Java 数据格式
Quartz-Spring通过 @Scheduled驱动任务
Quartz-Spring通过 @Scheduled驱动任务
91 0
|
缓存 NoSQL Java
SpringBoot定时任务@Scheduled的多线程使用
@Scheduled是Spring框架中的一个注解,它可以用于配置定时任务,使得方法可以按照规定的时间间隔定时执行。在使用该注解时,我们可以指定任务的执行时间、循环周期、并发数等参数,从而实现定时任务的功能。在Spring Boot中,@Scheduled注解可以直接应用于方法上。
445 0
quartz学习笔记6:多线程
quartz学习笔记6:多线程
88 0
quartz学习笔记5:update
quartz学习笔记5:update
77 0
quartz学习笔记-core
quartz学习笔记-core
85 0
|
调度 数据库
Quartz的Scheduler的关闭和挂起,并发控制(四)中
Quartz的Scheduler的关闭和挂起,并发控制(四)中
1715 0
Quartz的Scheduler的关闭和挂起,并发控制(四)中