【发布时间】:2014-04-30 07:50:50
【问题描述】:
同时,我保存了很多没有列名的 csv,因此我可以使用 cat 在 unix 中快速将它们组合在一起,而无需将它们组合在一起。这些 csv 有 1000 多列,所以我想保存一个列标题的副本,以便在重新聚合它们时使用,但是因为我正在并行创建这些文件,所以我只希望第一个工作来腌制熊猫索引对象。
通常,为了避免在写入文件时出现竞争条件,我会使用os.open() 根据this question。但是,我尝试在酸洗时将其结合起来:
cPickle.dump( df.columns, os.open( "/dir/my_columns.pkl", os.O_WRONLY|os.O_CREAT|os.O_EXCL ),-1 )
但是pickle.dump的第二个参数需要一个带有写属性的参数,但是os.open()返回的对象没有属性。如果多个线程竞相创建该对象,是否有替代方法可以让我安全地保存它?
【问题讨论】:
-
为避免竞争条件,锁定文件以进行写入,完成后释放锁定。并且不要打开这样的文件,尤其是在您处理多个线程试图打开同一个文件的情况下。使用
with语句。 -
我认为您的问题是如何从文件描述符创建文件对象。或者如何将标志传递给
open函数。
标签: python python-2.7 pickle race-condition