在方法之间读/写文件

时间:2016-04-16 07:35:39

标签: python file

我有两个功能,A和B:

def A():
    if (exists("temp/my_file.txt"):
        my_file = open("temp/my_file.txt", "r")
        # Do stuff
        my_file.close()
        remove("temp/my_file.txt")

def B():
    my_file = open("temp/my_file.txt", "w")
    # Do other stuff
    my_file.close()

这些函数被写入单独的脚本并独立运行。 B()创建A()应该读取然后删除的文件。但是,我遇到了各种问题(例如错误2)。我尝试使用posixfile在Windows中无效,Lockfile这会导致导入错误,我尝试将文件写入临时目录,而我&# 39;我在B()中使用它,然后在我希望A()读取并删除它时将其移回。

我能否了解一下发生了什么以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

虽然很可能一个人读取另一个线程正在写入的文件,但是任何一个线程都不可能删除文件而不会导致错误。

例如,如果读取线程删除了文件,则写入操作将失败,因为该文件不再存在。这听起来像你最好使用一个简单的消息队列,最简单的可能是redis lpush/rpop,它比文件io容易得多。

如果您使用redis执行此操作,

import redis
def A():
    rdb = redis.Redis()
    while True:
        item = rdb.rpop('somekey')
        # do stuff

和作家成为

import redis
def B():
    rdb = redis.Redis()
    while True:
        # do stuff
        rdb.lpush('somekey',item)

rpop(和lpop)将等待数据变为可用。如果你想停止循环推送一些特殊值作为信号