flock()函数有问题

2024-05-20 09:10:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我在考虑使用flock(),但是我很难找到关于flock如何工作的足够信息。我读到flock()在文件关闭后解锁文件。但是,如果python崩溃,是否存在可以保持文件打开的情况?

如果设置了LOCK_EX,那么允许使用锁定文件的确切内容是什么?只是锁定文件的模块?从最初运行的脚本导入的任何模块?


Tags: 模块文件脚本信息lock内容os地方
1条回答
网友
1楼 · 发布于 2024-05-20 09:10:17

当一个进程结束时,OS应该清理所有打开的文件资源(我肯定有一些警告)。这是因为当文件关闭时会释放通知锁,这是在python进程退出时作为操作系统清理的一部分执行的操作。

记住,flock(2)只是一个建议:

Advisory locks allow cooperating processes to perform consistent operations on files, but [other, poorly behaved] processes may still access those files without using advisory locks.

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

The locking mechanism allows two types of locks: shared locks and exclusive locks. At any time multiple shared locks may be applied to a file, but at no time are multiple exclusive, or both shared and exclusive, locks allowed simultaneously on a file.

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

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

相关问题 更多 >