python fcntl 文件锁

python fcntl 文件锁,第1张

概述此模块只有在 unix 系统上才有,windows 没有。 文档地址: https://docs.python.org/3.7/library/fcntl.html https://www.docs4dev.com/docs/zh/python/3.7.2rc1/all/library-fcntl.html 多进程示例程序 import fcntlimport osimport timefr 此模块只有在 unix 系统上才有,windows 没有。

文档地址:

https://docs.python.org/3.7/library/fcntl.html

https://www.docs4dev.com/docs/zh/python/3.7.2rc1/all/library-fcntl.html

多进程示例程序
import fcntlimport osimport timefrom multiprocessing import Pooldef worker():    print(‘task: %s‘ % os.getpID())    try:        f = open(‘scheduler.lock‘,‘wb‘)        ‘‘‘加锁,同步锁,其他进程获取不到需等待‘‘‘        fcntl.flock(f,fcntl.LOCK_EX)        print(‘I am get file %s‘ % os.getpID())        time.sleep(10)        ‘‘‘解锁‘‘‘        fcntl.flock(f,fcntl.LOCK_UN)        f.close()    except Exception as e:        print(‘file is already locked: %s‘ % os.getpID())if __name__ == ‘__main__‘:    p = Pool(4)    for i in range(5):        p.apply_async(worker)    print(‘Waiting for all subprocesses done...‘)    p.close()    p.join()    print(‘All subprocesses done.‘)
fcntl 详细参数
‘‘‘f 需传入文件对象,operator 传入加锁方式‘‘‘fcntl.flock(f,operator)fcntl.LOCK_SH    ‘共享锁‘fcntl.LOCK_EX    ‘排他锁‘fcntl.LOCK_NB    ‘非阻塞锁——如果指定此参数,函数不能获得文件锁就立即返回,否则,函数会等待获得文件锁。LOCK_NB可以同LOCK_SH或LOCK_NB进行按位或(|)运算 *** 作。 fcntl.flock (f,fcntl.LOCK_EX|fcntl.LOCK_NB)‘fcntl.LOCK_UN    ‘解锁‘
解决 gunicorn flask-apscheduler 重复执行问题
from flask import Flaskfrom service.extensions import schedulerimport loggingfrom logging.handlers import RotatingfileHandlerimport osimport fcntl,atexitbasedir = os.path.abspath(‘‘)def create_app():    app = Flask(__name__)    f = open("scheduler.lock","wb")    try:        ‘‘‘使用非阻塞锁‘‘‘        fcntl.flock(f,fcntl.LOCK_EX | fcntl.LOCK_NB)        register_apscheduler(app)    except Exception as e:        pass    def unlock():        fcntl.flock(f,fcntl.LOCK_UN)        f.close()    ‘‘‘注册一个退出回调函数,用于在程序退出时进行一些清理工作,关闭文件,解除锁‘‘‘    atexit.register(unlock)    return appdef register_apscheduler(app):    scheduler.init_app(app)    from service import aliyuncron    scheduler.start()app = create_app()@app.route(‘/‘)def index():    return ‘<h1>Hello World!</h1>‘
总结

以上是内存溢出为你收集整理的python fcntl 文件锁全部内容,希望文章能够帮你解决python fcntl 文件锁所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1191539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存