首页 > 解决方案 > 当不同用户调用相同函数> 10次时如何使用python读取和写入文件

问题描述

这只是一个了解该功能是否会在大文件中产生一些问题/失败的问题。我有超过 10 个用户想要在不完全相同的时间读取/写入,但几乎与 .py 脚本相同的大文件的背景进度一样。每个用户都有自己的行,其中与另一个用户的大量关系信息被写成一个非常大的字符串。例如:

[['user1','user2','1'],['user6','user50','2'],['and so on']]
['user1','user2','this;is;the;really;long;string;..(i am 18k letters long)...']
['user6','user50','this;is;the;really;long;string;..(i am 16k letters long)...']   
...and so on

现在用户 1 只想阅读他的第 1 行,而用户 6 想删除他自己的第 2 行。所以现在我的问题是:

  1. 如果所有用户都只是读取文件,我找不到任何问题,但是如果用户 6 想要删除他自己的行信息并用新信息重写第 0 行并将其他行重写到换行位置,那么其他用户将如何> 10如果用户 6 需要更多时间来写入新文件,其他用户 >10 时会读取该文件吗?他们不需要很长时间来打开文件,如果他们等待让用户 6 完成他的工作,其他人会读取文件的错误信息

  2. 编写 .py 脚本就足够了

     f = open(fileNameArr, "rw")
     ....
     f.close()
    

解决那个问题?或者可能是“rwb+”或者需要做什么?

  1. 我是否应该在 .py 脚本中插入一些临时超时函数作为示例,我必须将其插入 php set_time_limit(300); 长时间的计算和输出?

对于任何输入来理解一个很大的 thx 取决于你。

标签: pythonunix

解决方案


您应该查找Unix 文件管理- Unix 没有为您提供一个很好的开箱即用的解决方案来解决这个问题。

简短的版本是任意数量的进程可以一次读取同一个文件,但在大多数权限集下,任何进程都可以覆盖该文件。不像在 Windows 上,操作系统阻止多个程序一次编辑同一个文件,在 Unix 上,任何写入都会覆盖所有以前的写入- 如果两个用户从同一个基本文件开始并进行不同的更改,那么.write()最近调用的人会赢。是的,这确实会导致并发问题。

上面的答案提到了一些对策 - 即,在程序的软件级别强制执行文件锁定,这基本上是我在评论中建议的 - 但据我所知,这个问题没有通用的解决方案。

Google Docs 和 Drive 的其余部分具有协作文件编辑,虽然代码显然不公开,但似乎使用Operational Transformation作为其主要方法,其中基本上没有用户可以直接修改文件,而不是使用典型文件每个用户的 I/O 命令将其所需的修改发送给服务器,然后服务器解决并发问题。


也许你应该重新考虑你设计这个系统的方式?为什么所有这些信息都存储在一个文件中,每一行都专用于特定用户?为什么不拥有多个较小的文件,每个用户一个,这样可以减少读/写的并发问题?为什么不使用数据库来存储这些信息,让数据库来处理并发问题呢?大多数数据库可以处理任意大的字符串,虽然有些数据库不容易扩展到您在问题中提到的 30GB,但其他数据库肯定可以。


推荐阅读