美文网首页程序员
使用文件锁flock实现进程互斥

使用文件锁flock实现进程互斥

作者: PythonDeveloper | 来源:发表于2017-03-10 20:31 被阅读389次

最近写了一个python脚本,对Android设备进行自动化测试。当重复执行脚本时,如果不对访问设备进行锁控制,不同的脚本可能会同时向设备发出指令,导致测试失败。所以尝试用flock实现了简单的脚本互斥。当获取锁失败时,flocked函数会raise OsError。此时说明已经有脚本在运行。

import fcntl
from contextlib import contextmanager
import logging

logger = logging.getLogger(__name__)

@contextmanager
def flocked(lock_file):
    with open(lock_file, 'w') as fd:
        try:
            # Lock file. Raise OsError if failed to lock.
            fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
            logger.info('Acquired lock for %s', lock_file)
            yield
        finally:
            fcntl.flock(fd, fcntl.LOCK_UN)
            logger.info('Released lock for %s', lock_file)

try:
    with flocked('/tmp/lock_file'):
        # Do something.
except OsError:
       logger.exception('Failed to lock file')

相关文章

  • 使用文件锁flock实现进程互斥

    最近写了一个python脚本,对Android设备进行自动化测试。当重复执行脚本时,如果不对访问设备进行锁控制,不...

  • 进程间同步

    互斥锁 进程间也可以使用互斥锁同步, 但必须在pthread_mutex_init(&mutex, attr)之前...

  • 进程学习三

    进程进阶 1.进程锁 这里的进程锁与线程锁、互斥量、读写锁和自旋锁不同,它是通过记录一个PID文件,避免两个进程同...

  • Worker抢占机制与epoll模型

    master进程fork多个worker进程。 worker抢占accept_mutex互斥锁。 使用epoll模...

  • linux使用flock文件锁解决脚本重复执行问题

    关于forck flock 是对于整个文件的建议性锁。也就是说,如果一个进程在一个文件(inode)上放了锁,那么...

  • 进程间通信

    进程的读写 写文件的进程只能单个运行(写的时候禁止读),读文件的进程可以同时有多个,读写的互斥锁wsem,rsem...

  • 了解cephfs锁必须要知道的事情

    1、本文讨论的锁不是flock。flock是posix标准中对文件某部分偏移加的锁。而这里的锁指的是MDS集中管理...

  • go程

    golang里捕获进程信号实现优雅退出的方法 一、定时与 同步退出 二、锁 互斥锁Mutex Lock,UnLock

  • 线程同步-锁

    进程同步-锁 互斥锁 模拟抢票程序: 在多个进程要对同一个文件进行修改时,要避免出现多个进程同时修改的情况,这种情...

  • 【第58天】python全栈从入门到放弃

    1 递归锁Rlock()和互斥锁 递归锁 互斥锁 2 条件Condition 条件的例子 3 守护进程和守护线程与...

网友评论

    本文标题:使用文件锁flock实现进程互斥

    本文链接:https://www.haomeiwen.com/subject/fveigttx.html