我使用队列和线程将数据写入CSV。我遇到了一个问题,其中一个工作人员将写入CSV,然后另一个工作人员将写入CSV,从而导致数据的布局问题。
当一个工作人员打开它时,是否可以锁定CSV,这样在他们再次关闭之前,没有其他工作人员可以打开它?
谢谢!
答案 0 :(得分:0)
您有两个基本选项。一种是使用应用程序中threading
模块提供的锁定。一个简单的Lock
对象可能就足够了。这通常可用于保护任何资源免受多个线程的并发访问。但是,如果您的访问权限跨越您的流程的多个实例,那么它将不会有任何好处。
您的另一个选择是使用fcntl.lockf()
函数锁定文件系统。这允许多个进程保护文件免受并发访问,但请注意,这仍然是建议锁定 - 它没有做任何事情来保护您免受写入该文件的另一个进程的影响。 ; t使用你的锁定策略。
螺纹锁的优点是它们重量更轻,速度更快。文件系统锁定的优点是它可以在进程之间工作,还可以减少在应用程序内部传递状态的需要(即锁定对象)。除非性能是最重要的考虑因素,否则我会使用文件系统锁定。但是,文件系统锁定的可移植性可能会受到限制,在这种情况下,标准Lock
对象可能会更适合您。
无论您使用哪一个,理想情况下都应确保使用with
语句,以确保在完成锁定后始终释放锁定。请注意,当您关闭文件句柄时,文件系统锁定也会自动释放。