【问题标题】:simultaneous reading and writing to a file in python在python中同时读取和写入文件
【发布时间】:2013-02-20 17:51:35
【问题描述】:

我计划在 python3 中使用三个文本文件或三个数据库表的应用程序,我不确定要使用什么。这些文件仅包含字符串或数据库表中的单个列,每行中都有一个字符串.

该应用程序具有三个程序program_A,program_B,program_C,它们操作这三个文件,file_A和file_B和file_C。程序A读取/写入file_A读取file_C并写入file_B,program_B读取/写入file_B,program_C写入file_A和file_C.file_A和file_B只不过是虚构的队列,因此程序从文件中读取一行,然后从文件中删除该行(因此我提到了读/写),而写入文件的程序将一行写入文件末尾。
我不确定如何让这些程序工作,因为这些程序同时访问文件。我研究了 sqlite 文件锁定状态,但我不知道如何使用它来解决我的场景。我也不确定如果我应该使用 sqlite 数据库或简单的文本文件。

我也在考虑使用某种共享内存或内存数据库,我可以在应用程序启动时加载这些文件的内容,并在应用程序退出时写回文件,但我担心如果某些软件硬件故障意味着我会由于失败导致文件未更新,因此丢失在该应用运行时完成的工作。

【问题讨论】:

    标签: python file


    【解决方案1】:

    在同一个文件中读写?不,这只会带来痛苦和困难。您可以尝试threadingmultiprocessing 的数据共享机制,并拥有适合您需求的queue 实现。

    sqlite 方法似乎也不错,因为您可以添加必要的数据来设置这些“队列”的顺序等等,但我不喜欢通过数据库进行通信的进程。

    【讨论】:

    • 谢谢。我认为多处理的机制可以满足我的需求,尤其是队列。现在我正在通过多处理的文档中实现共享内存的机制。我已经看到很多类似问题的回复不鼓励共享内存,所以我会更多地研究这个话题。
    • 如果我正确理解你的情况,你不需要共享内存机制,队列就足够了。但是,不要相信qsizeempty。始终在进程明确收到它等待的队列为空的确认后停止进程(例如,将None 放入队列中,当进程读取它时,它会停止)。
    • 感谢有关队列中“无”的提示。队列足以满足 file_A,file_B 部分,但 file_C 部分不是队列。program_C 确实写入文件末尾,但 program_A需要遍历此文件中存在的所有字符串。
    • 糟糕,我一定错过了。共享内存还不错。你只需要小心。
    猜你喜欢
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2013-01-06
    相关资源
    最近更新 更多