我有两个功能,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()
读取并删除它时将其移回。
我能否了解一下发生了什么以及如何解决这个问题?
答案 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)将等待数据变为可用。如果你想停止循环推送一些特殊值作为信号