在方法之间读/写文件

2024-04-27 03:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个功能,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()读取和删除文件时将其移回。你知道吗

我能了解一下发生了什么事,以及如何解决这个问题吗?你知道吗


Tags: 文件功能txtcloseifmydef错误
1条回答
网友
1楼 · 发布于 2024-04-27 03:17:22

虽然一个线程很可能读取另一个线程正在写入的文件,但两个线程都不可能删除该文件而不导致错误。你知道吗

例如,如果读取线程删除了该文件,则写入操作将失败,因为该文件不再存在。这听起来像是一种情况,您最好使用一个简单的消息队列,最简单的可能是redislpush/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)将等待数据可用。如果你想停止循环,就输入一些特殊值作为信号

相关问题 更多 >