当前位置: 首页 > news >正文

个人自助网站做网站在哪儿买空间

个人自助网站,做网站在哪儿买空间,头条站长平台,营销型网站建设电话多个进程共享同一份资源(共享内存、文件等)时,会涉及到资源竞争问题。为了解决这种问题,一般采取的措施是进程在访问资源前加锁保护,避免多个进程同时读写。本文介绍的Python文件锁可以用来解决多进程的同步问题。 目录…

多个进程共享同一份资源(共享内存、文件等)时,会涉及到资源竞争问题。为了解决这种问题,一般采取的措施是进程在访问资源前加锁保护,避免多个进程同时读写。本文介绍的Python文件锁可以用来解决多进程的同步问题。

目录

  • 1 Linux下的Python文件锁
  • 2 Windows下的Python文件锁
  • 3 总结
    • 3.1 filelock的使用场景
      • 进程一
      • 进程二


1 Linux下的Python文件锁

Linux下使用文件锁用到了fcntl模块,该模块是标准库,用来对文件描述符执行文件控制和I/O控制。
fcntl的文件锁用到了fcntl.flock(fd, operation)方法,它的官方说明如下:

对文件描述符fd执行锁定操作。
如果flock()失败,将引发OSError异常。

参数含义:
fd:要锁定的文件的描述符。
operation:操作类型,有以下三种。

类型描述
LOCK_UN解锁
LOCK_SH获取共享锁,所有进程都只能读,不能写
LOCK_EX获取独占锁,只有当前进程可以读写
LOCK_NB非阻塞,加锁失败或成功都立即返回,如果不加这个参数,函数会一直阻塞,直到拿到锁。

用法:

def tryLock(f) :try :fcntl.flock(f, fcntl.LOCK_EX | fcntl.LOCK_NB)return Trueexcept Exception as e:return Falsedef tryUnLock(f) :try :fcntl.flock(f, fcntl.LOCK_UN)return Trueexcept Exception as e:return Falsef = open('file.txt', 'w+')
if tryLock(f) == True:f.write('1234')tryUnLock(f)

flock函数在执行失败时,会抛出异常,所以要用try-except来捕捉,避免flock的时候程序退出。
fcntl模块支持在独占模式下写文件。

2 Windows下的Python文件锁

Windows版本的Python没有提供fcntl模块,它使用文件锁时使用的是filelock模块,需要自己安装。
打开命令行安装。

pip install filelock

虽然没找到filelock的官方文档,但可以通过dir函数来看它有些什么方法。

import filelock 
print(dir(filelock))

输出。

['AcquireReturnProxy', 'BaseFileLock', 'FileLock', 'SoftFileLock', 
'Timeout', 'UnixFileLock', 'WindowsFileLock', '_FileLock', '__all__', 
'__annotations__', '__builtins__', '__cached__', '__doc__', '__file__',
'__loader__', '__name__', '__package__', '__path__', '__spec__',
'__version__', '_api', '_error', '_soft', '_unix', '_util', '_windows',
'annotations', 'has_fcntl', 'sys', 'version', 'warnings']

Python里形如__xxx__的一般都是私有成员。

没有直接提供方法,但从中能看到一个FileLock类和__path__路径,打印一下。

import filelock 
print(dir(filelock.FileLock))
print(filelock.__path__)

输出。

['__abstractmethods__', '__call__', '__class__', '__del__', 
'__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', 
'__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', 
'__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', 
'__lt__', '__module__', '__ne__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', 
'__str__', '__subclasshook__', '__weakref__', '_abc_impl', '_acquire', 
'_recreate_cm', '_release', 'acquire', 'is_locked', 'lock_file', 'release', 'timeout']['D:\\xxx\\xxx\\xxx\\site-packages\\filelock']

FileLock提供了acquire、is_locked、release、timeout。按照名称,acquire和release是上锁和解锁的方法,timeout是上锁的超时限制。
进入__path__所在目录,用vscode的全局搜索分别找到FileLock、acquire、release、timeout。
在这里插入图片描述
用这种方法得到以下使用例程。

from filelock import FileLock
import timedef tryLock(locker, timeout = 3):try:locker.acquire(timeout)return Trueexcept Exception as e:return Falsedef tryUnLock(locker):try:locker.release()return Trueexcept Exception as e:return Falselocker = FileLock('file.txt')
if tryLock(locker, 0.1) == True:time.sleep(5)tryUnLock(locker)

filelock同样是通过抛出异常来表示上锁失败。
filelock模块在上锁状态下不允许写文件。
filelock支持在Linux环境下使用。

3 总结

在Linux环境下可以用fcntl或者filelock模块来实现文件锁功能,而在Windows环境下只能用filelock。
fcntl和filelock上锁的区别:

filelockfcntl
可以设置阻塞超时时长可以设置阻塞和非阻塞,没有超时机制
上锁后不能访问文件在LOCK_EX 独占锁模式下,当前进程可以读写文件
需要自行安装Python自带的标准库

3.1 filelock的使用场景

filelock在上锁之后不能访问文件,那么它有什么用呢?
在应用中可以把filelock上锁的文件作为进程间同步的标志物,比如以下例子:
tryLock和tryUnLock使用的是第二节例程的。

进程一

locker = FileLock('lock_file')
while True:if tryLock(locker) == True:## operate1tryUnLock(locker)

进程二

locker = FileLock('lock_file')
while True:if tryLock(locker) == True:## operate2tryUnLock(locker)

以上两个进程同时运行,可以确保操作互不干扰。

http://www.yayakq.cn/news/619539/

相关文章:

  • 搜狐网站开发wordpress重写页面样式
  • 贵阳做网站设计永久免费做网站app
  • 基于html的网站开发广州物流最新情况
  • 教务管理网站开发抖音代运营套餐价格表
  • 深圳建设网站价格做网站需要商标注册吗
  • 建设部网站水利造价师禁止 wordpress ajax
  • 北京微网站制作江苏建设电子信息网站
  • 横峰县建设局网站个人工作总结ppt模板免费
  • 泸州住房和城乡建设厅网站软硬件开发公司
  • wordpress 后台 324合肥seo建站
  • 如何刷网站访问量服务器维护网站建设教程
  • 做合法的海外购网站需要什么手续建设婚恋网站基本功能有哪些
  • 临沂网站建设选盛誉温州网站快速排名
  • 网站集群建设解决方案广州网站建设电话大全
  • 提升网站权重吗从WordPress源码恢复
  • 北京网站建设设计公司哪家好网站建设宗旨是什么
  • 简单大气网站陕西高速公路建设网站
  • 广东建网站工具类网站做排名
  • 公司做网站 微信平台活动营销
  • 取消网站的通知书网站优化策略分析
  • 交互 网站家装公司文案
  • 淘宝客网站域名备案吗乱码网站怎么办
  • 淘宝客户自己做网站怎么做室内设计平面图手绘
  • 网站建设实验总结报告网站不同颜色
  • 关于水果的网站开发在线培训系统平台
  • 嘉兴市住房和城乡建设局门户网站校园网站建设管理
  • 西安哪家做网站公司好太原seo排名优化软件
  • 如何编程写代码网站搜索引擎优化推广
  • 美工个人网站潜江资讯网找工作
  • 宿迁网站建设介绍公司淘客网站佣金建设