我有两个函数,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
这给了我导入错误,当我在B()
中使用它时,我尝试将文件写入临时目录。然后当我想要时将其移回 A()
读取并删除它。
我可以深入了解发生了什么以及如何解决这个问题吗?
最佳答案
虽然一个线程很可能读取另一个线程正在写入的文件,但任何一个线程都不可能在不导致错误的情况下删除该文件。
例如,如果读取线程删除了文件,则写入操作将失败,因为该文件不再存在。这听起来像是您最好使用简单的消息队列,最简单的可能是 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)将等待数据可用。如果你想停止循环推送一些特殊值作为信号
关于python - 在方法之间读/写文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661472/