我有一个问题 flock() 作品,尤其是在Python。我有一个可以打开串行连接的模块(通过 os.open())。我需要使这个线程安全。它很容易使其在使用同一模块中使用时的线程安全 threading.Lock(), ,但是,如果模块从不同的位置导入,则它会破裂。

我正在考虑使用 flock(), ,但是我很难找到有关羊群如何工作的足够信息。我读到文件关闭后,羊群()解锁文件。但是,如果Python崩溃,是否会有一种情况可以使文件打开?

以及如果允许使用锁定文件 LOCK_EX 设置了吗?只是锁定文件的模块?从最初运行的脚本导入的任何模块?

有帮助吗?

解决方案

当过程死亡时 应该 清理任何打开的文件资源(我敢肯定)。这是因为当文件关闭时释放了咨询锁 python 流程退出。

记住, 羊群(2) 只是咨询:

咨询锁允许 合作 在文件上执行一致操作的过程,但是[其他,行为不佳]的过程仍可能在不使用咨询锁的情况下访问这些文件。

羊群(2) 实现读者作者锁。您不能两次蜂拥而至 LOCK_EX, ,但是任何人都可以蜂拥而至 LOCK_SH 同时(只要没有其他人 LOCK_EX 在上面)。

锁定机制允许两种类型的锁:共享锁和独家锁。在任何时间都可以将多个共享锁应用于文件,但是在任何时间都不是多个独家或共享和独家的锁,在文件上同时允许锁。

羊群在OS/过程级别上工作,并且与Python模块无关。一个模块可以要求 n 锁,或 n 可以要求锁 m 模块。但是,只有一个过程可以容纳 LOCK_EX 在给定时间锁定给定文件。

YMMV在“非Unix”系统或非本地文件系统上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top