gpt4 book ai didi

python - 在方法之间读/写文件

转载 作者:太空宇宙 更新时间:2023-11-03 16:42:38 25 4
gpt4 key购买 nike

我有两个函数,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com