首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flock()函数有问题

flock()函数有问题
EN

Stack Overflow用户
提问于 2010-10-13 03:43:24
回答 1查看 7.2K关注 0票数 1

我有一个关于flock()如何工作的问题,特别是在python中。我有一个模块可以打开串行连接(通过os.open())。我需要保证这个线程的安全。当使用threading.Lock()在同一模块中工作时,使其线程安全很容易,但是如果模块从不同的地方导入,它就会崩溃。

我正在考虑使用flock(),但我很难找到关于flock确切工作原理的足够信息。我读到flock()在文件关闭后解锁文件。但是有没有一种情况可以在python崩溃的情况下保持文件打开呢?

如果设置了LOCK_EX,那么到底允许什么来使用锁定的文件?仅仅是锁定文件的模块?从最初运行的脚本导入的任何模块?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-13 04:01:35

当一个进程终止时,操作系统应该清理所有打开的文件资源(我敢肯定,有一些警告)。这是因为建议锁在文件关闭时释放,该操作在python进程退出时作为操作系统清理的一部分发生。

请记住,flock(2)仅仅是建议:

建议锁允许协作的进程对文件执行一致的操作,但其他表现不佳的进程仍然可以在不使用建议锁的情况下访问这些文件。

flock(2)实现了读取器-写入器锁。您不能使用LOCK_EX将同一文件聚集两次,但是可以使用LOCK_SH同时聚集任何数量的人(只要没有其他人在它上面有LOCK_EX )。

锁定机制允许两种类型的锁:共享锁和排他锁。任何时候都可以对一个文件应用多个共享锁,但任何时候都不允许对一个文件同时应用多个独占锁,或者同时使用共享锁和独占锁。

flock在操作系统/进程级别工作,独立于python模块。一个模块可以请求n个锁,或者可以跨m个模块请求n个锁。但是,在给定时间,只有一个进程可以持有给定文件上的LOCK_EX锁。

“非UNIX”系统或非本地文件系统上的YMMV。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3918385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档