`
xiaoyu966
  • 浏览: 258922 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python之跨进程锁的实现---fcntl

阅读更多

============================================================================

原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。

请注明转自:http://yunjianfei.iteye.com/blog/

============================================================================

 

跨进程锁的实现方式中,基于文件锁的方式相对来说好一点。以下贴出一个简单的代码:

 

import os
import fcntl

class Lock: 
    def __init__(self, filename):
        self.filename = filename
        # This will create it if it does not exist already
        self.handle = open(filename, 'w')
    
    # Bitwise OR fcntl.LOCK_NB if you need a non-blocking lock 
    def acquire(self):
        fcntl.flock(self.handle, fcntl.LOCK_EX)
        
    def release(self):
        fcntl.flock(self.handle, fcntl.LOCK_UN)
        
    def __del__(self):
        self.handle.close()

# Usage
try:
    lock = Lock("/tmp/lock_name.tmp")
    lock.acquire()
    # Do important stuff that needs to be synchronized

finally: 
    lock.release()

 可以同时运行多份该程序来进行试验。

 

这种方式的锁有以下特点:

1. 锁文件只在第一次调用的时候创建。

2. 锁是通过kernel来控制的,不消耗磁盘IO

3. 这种方式的锁只对同一个OS中的进程有效。跨服务器、OS是无效的,这时候需要选用分布式锁,比如Elock  http://dustin.sallings.org/elock/

 

1
0
分享到:
评论

相关推荐

    Python使用文件锁实现进程间同步功能【基于fcntl模块】

    本文实例讲述了Python使用文件锁实现进程间同步功能。分享给大家供大家参考,具体如下: 简介 在实际应用中,会出现这种应用场景:希望shell下执行的脚本对某些竞争资源提供保护,避免出现冲突。本文将通过fcntl模块...

    fcntl.py文件下载

    6. **进程间通信(IPC)**:在某些情况下,`fcntl`可以与其他系统调用(如`pipe`, `socket`)结合,实现进程间的通信。 使用`fcntl`模块时需要注意,由于其依赖于Unix系统的特性,所以在非Unix环境(如Windows)中...

    python使用fcntl模块实现程序加锁功能示例

    本文实例讲述了python使用fcntl模块实现程序加锁功能。分享给大家供大家参考,具体如下: python 中引入给文件加锁的 fcntl模块 import fcntl 打开一个文件 ##当前目录下test文件要先存在,如果不存在会报错。...

    python基于mysql实现的简单队列以及跨进程锁实例详解

    在Python中,有多种实现跨进程锁的方法,如信号量、文件锁(fcntl)、socket(端口号绑定)和信号(signal)。然而,在本例中,我们将使用MySQL提供的`GET_LOCK()`函数来创建一个跨进程的锁。 `GET_LOCK()`函数允许...

    Python简单进程锁代码实例

    以下是一个使用Python实现的进程锁代码实例: ```python import fcntl class ProcessLock: __lockfd = None @staticmethod def lock(): ProcessLock.__lockfd = open(__file__, 'a+') fcntl.flock...

    fcntl.py文件

    这个模块的命名直接来源于C语言中对应的头文件`fcntl.h`,在C编程中,`fcntl`函数集用于实现诸如文件锁、文件描述符选项设置以及文件状态查询等高级文件操作。 fcntl模块的核心功能包括: 1. **文件锁定**:在多...

    Python3.7.2中文文档-标准库-通用操作系统服务

    Python3.7.2的标准库提供了丰富的模块和函数,用于实现通用的操作系统服务。这些服务涵盖了文件和目录操作、进程管理、环境变量处理等多个方面,是Python编程的基础工具。在这个中文文档中,我们可以深入理解Python...

    多进程写sqlite互斥解决方案代码

    在Python中,可以使用`multiprocessing.Lock()`来实现跨进程的互斥锁。当一个进程获得锁后,其他试图获取锁的进程会被阻塞,直到拥有锁的进程释放它。 对于多线程环境,线程间的同步可以通过线程互斥锁(threading....

    python 利用文件锁单例执行脚本的方法

    总之,Python中利用文件锁实现单例模式是一种有效的Linux系统下解决方案,但需要注意其局限性,如非跨平台兼容性和潜在的锁未释放问题。在设计多进程协作的系统时,理解并正确使用文件锁是至关重要的。

    对Python多线程读写文件加锁的实例详解

    在linux下,python的标准库有现成的文件锁,来自于fcntl模块。这个模块提供了unix系统fcntl()和ioctl()的接口。 对于文件锁的操作,主要需要使用 fcntl.flock(fd, operation)这个函数。 其中,参数 fd 表示文件描述...

    文件锁,很好用的一个东西

    文件锁的实现通常依赖于操作系统提供的API,如在Unix/Linux系统中,可以使用fcntl()函数的F_SETLK和F_SETLKW标志来设置锁;在Windows系统中,可以使用CreateFile()函数配合LockFileEx()或UnlockFileEx()来实现。这些...

    PyPI 官网下载 | portalocker-1.2.1.tar.gz

    - `portalocker`通过使用Python的`fcntl`(Unix系统)和`msvcrt`(Windows系统)模块来实现跨平台的文件锁定。在Unix系统上,它利用了fcntl函数进行锁操作;而在Windows系统上,它依赖于CreateFile和LockFileEx API...

    多进程互斥读写XML文件

    - 在Python中,可以使用`threading.Lock`或`multiprocessing.Lock`来实现进程间的互斥锁。 - 在C++中,可以使用`std::mutex`(线程)或`std::shared_mutex`(读写锁)来控制对XML文件的访问。 7. **性能优化** -...

    Safelock 0.5.zip

    Safelock 0.5 是一个基于Python编程语言的开源项目,其核心在于实现一种安全的锁机制,确保在多线程或多进程环境中数据的正确性和一致性。通过分析Safelock 0.5 的源代码,我们可以深入理解Python在并发控制和资源...

    基于多进程中APScheduler重复运行的解决方法

    这个方法的优点是简单且有效,只需要一个文件即可实现跨进程的同步。同时,由于锁是基于文件系统的,即使在分布式系统中,只要所有进程都能访问同一文件系统,这种方法也能正常工作。 总的来说,解决多进程中...

    python3 自动打印出最新版本执行的mysql2redis实例

    - `ApplicationInstance()` 使用`fcntl.flock()`方法创建一个排他锁,确保脚本在多进程环境中只有一个实例运行。 - `getversion(url)` 使用`requests.get()`发送HTTP GET请求,处理可能出现的异常,并返回解析后的...

    基于python模拟多集群调度的任务调度器源码+项目说明(含随机算法、贪心算法、预测算法、蚁群算法).zip

    基于文件实现的文件锁(windows无fcntl等库) 待做: 1. 集群资源动态可视化未做,评估调度优劣的模块未做(CPU利用率,MEM利用率,平均周转时间...) 2. 只实现了简单的随机调度,未来将实现基于启发式算法的...

Global site tag (gtag.js) - Google Analytics