IOError:[Errno 24]打开的文件太多-但我关闭了所有文件

时间:2018-12-25 10:53:19

标签: python file loops io ioerror

我每0.01s读取一个文件,但是我用

with open('file.txt','r') as FILE:
    data = FILE.read()

应按照官方文档的保存方式打开和关闭文件。

在同一时间,我以相同的方式(2s-20s)一次写入同一文件,但带有'w'标志-但来自完全不同的python进程

大约20分钟的正常工作后,我会收到此错误

IOError: [Errno 24] Too many open files:

我认为这是完全荒谬的错误。有一件有趣的事情发生了,我不得不在这里提及。由于这是在我的树莓派中发生的,没有理由期待此错误,所以我没有涵盖LOG的错误。因此,我尝试记录该错误,并且发生了一些奇怪的事情:

while True:
    ...
    #loop where I read every 0.01 a file, IOError of the reading file happens
    ...
    except Exception as e: # log the IOEerror
        with open('log_error.txt','w') as FILE: # Cacthes the error but triggers a new IOError
            FILE.write(e)

发生IOError后,在Exception中发生了新的错误,而不是读取文件的IOError,我得到了IOError来将错误记录在log_error.txt中

任何人都知道发生了什么事吗?我无法弄清楚,因为它在20分钟到2小时后崩溃(这意味着文件最少以20 * 60 / 0.01的速度打开,并且没有错误发生)。它只是一直工作到没有。感谢您的任何建议

编辑-代码: 我有接收命令的MQTT订户(写在路径self.path_anim_current上的文件中)

if payload['request']=='write_in':
    with open(self.path_anim_current,'w') as FILE:
        FILE.write(payload['data'])

在不同的过程中,我尝试尽快捕获文件中的更改-那就是0.01s的读取循环,我在self.path_anim_current上读取文件

这是0.01s读取循环的摘录: PATH = self.path_anim_current

with open(PATH,'r') as FILE:
        ANIMATION = FILE.read()
if ANIMATION != '':
    COMMAND = rc.process_json(str(ANIMATION))
    with open(PATH,'w') as FILE:
        FILE.write('') #**On reading the file I want to delete its content**

rc.process_json-它只是一个使用某些配置加载json文件的功能

以标准方式读取json

with open('path_to_some_config') as FILE:
        DOCUMENT = json.load(FILE)

0 个答案:

没有答案