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

标签 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这给了我导入错误,当我在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/

相关文章:

c# - 不可删除/不可见的 .text 文件

python - 将代理传递给 Seaborn

python - 如何在OpenCV中过滤关键点匹配?

Java 如何从任何用户的桌面读取/写入文件

java - 使用接受文件的 Spring Controller 防止内存不足错误

java - 试图在 java 中将证书添加到我的 post 方法

python - 将平面列表中的 N 个元素迭代地分配给矩阵的每个成员

python - shell脚本查找字符串并递归打印当前行和下一行

python - 捕获任何 DoesNotExist 错误

python - 帮助解决读取文件时出现 IOError 的问题