我有一个关于flock()
如何工作的问题,特别是在python中。我有一个打开串行连接的模块(通过os.open()
)。我需要把这根线弄安全。当使用threading.Lock()
在同一个模块中工作时,很容易使它成为线程安全的,但是如果该模块从不同的地方导入,它就会崩溃。
我在考虑使用flock()
,但是我很难找到关于flock如何工作的足够信息。我读到flock()在文件关闭后解锁文件。但是,如果python崩溃,是否存在可以保持文件打开的情况?
如果设置了LOCK_EX
,那么允许使用锁定文件的确切内容是什么?只是锁定文件的模块?从最初运行的脚本导入的任何模块?
当一个进程结束时,OS应该清理所有打开的文件资源(我肯定有一些警告)。这是因为当文件关闭时会释放通知锁,这是在
python
进程退出时作为操作系统清理的一部分执行的操作。记住,flock(2)只是一个建议:
flock(2)实现读写器锁。不能用
LOCK_EX
两次聚集同一个文件,但任何数量的人都可以同时用LOCK_SH
聚集它(只要没有其他人在上面有LOCK_EX
)。flock在操作系统/进程级别工作,独立于python模块。一个模块可以请求n锁,或者可以跨m模块请求n锁。但是,在给定的时间内,只有一个进程可以持有给定文件的
LOCK_EX
锁。“非UNIX”系统或非本地文件系统上的YMMV。
相关问题 更多 >
编程相关推荐