【问题标题】:How do you lock a CSV file when writing to it using python使用python写入CSV文件时如何锁定它
【发布时间】:2016-06-25 18:53:01
【问题描述】:

我正在使用队列和线程将数据写入 CSV。我遇到了一个问题,一个工作人员将写入 CSV,然后另一个工作人员将写入 CSV,从而导致数据布局方式出现问题。

是否可以在一名工作人员打开 CSV 时将其锁定,以便其他工作人员在再次关闭之前无法打开它?

谢谢!

【问题讨论】:

标签: python multithreading csv


【解决方案1】:

您有两个基本选择。一种是在应用程序中使用threading 模块提供的锁定。一个简单的Lock 对象可能就足够了。这通常可用于保护任何资源免受多个线程的并发访问。但是,如果您的访问跨越进程的多个实例,则不会有任何好处。

您的另一个选择是使用带有fcntl.lockf() 函数的文件系统锁定。这允许多个进程保护文件免受并发访问,但请注意,这仍然是 advisory 锁定 - 它不会做任何事情来保护您免受另一个不使用您的文件的进程写入文件锁定策略。

线程锁的优点是重量更轻、速度更快。文件系统锁定的优点是它可以在进程之间工作,并且还减少了您在应用程序内部传递状态的需要(即锁定对象)。除非性能是最重要的问题,否则我会选择文件系统锁定。但是,文件系统锁定的可移植性可能会受到限制,在这种情况下,标准的 Lock 对象可能更适合您。

无论您使用哪一种,理想情况下,您都应该确保使用with 语句,以确保在完成锁定后始终释放锁定。请注意,当您关闭文件句柄时,文件系统锁定也会自动释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2016-06-07
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多