python - 当不同用户调用相同函数> 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 行。所以现在我的问题是:
如果所有用户都只是读取文件,我找不到任何问题,但是如果用户 6 想要删除他自己的行信息并用新信息重写第 0 行并将其他行重写到换行位置,那么其他用户将如何> 10如果用户 6 需要更多时间来写入新文件,其他用户 >10 时会读取该文件吗?他们不需要很长时间来打开文件,如果他们等待让用户 6 完成他的工作,其他人会读取文件的错误信息
编写 .py 脚本就足够了
f = open(fileNameArr, "rw") .... f.close()
解决那个问题?或者可能是“rwb+”或者需要做什么?
- 我是否应该在 .py 脚本中插入一些临时超时函数作为示例,我必须将其插入 php set_time_limit(300); 长时间的计算和输出?
对于任何输入来理解一个很大的 thx 取决于你。
解决方案
您应该查找Unix 文件管理- Unix 没有为您提供一个很好的开箱即用的解决方案来解决这个问题。
简短的版本是任意数量的进程可以一次读取同一个文件,但在大多数权限集下,任何进程都可以覆盖该文件。不像在 Windows 上,操作系统阻止多个程序一次编辑同一个文件,在 Unix 上,任何写入都会覆盖所有以前的写入- 如果两个用户从同一个基本文件开始并进行不同的更改,那么.write()
最近调用的人会赢。是的,这确实会导致并发问题。
上面的答案提到了一些对策 - 即,在程序的软件级别强制执行文件锁定,这基本上是我在评论中建议的 - 但据我所知,这个问题没有通用的解决方案。
Google Docs 和 Drive 的其余部分具有协作文件编辑,虽然代码显然不公开,但似乎使用Operational Transformation作为其主要方法,其中基本上没有用户可以直接修改文件,而不是使用典型文件每个用户的 I/O 命令将其所需的修改发送给服务器,然后服务器解决并发问题。
也许你应该重新考虑你设计这个系统的方式?为什么所有这些信息都存储在一个文件中,每一行都专用于特定用户?为什么不拥有多个较小的文件,每个用户一个,这样可以减少读/写的并发问题?为什么不使用数据库来存储这些信息,让数据库来处理并发问题呢?大多数数据库可以处理任意大的字符串,虽然有些数据库不容易扩展到您在问题中提到的 30GB,但其他数据库肯定可以。
推荐阅读
- html - 如何创建 33% / 33% / 33% / 100% / 100% flexbox 布局?
- python - 如果第二个嵌入的“if”语句被注释掉,为什么这个循环会导致 Key 错误?
- python - 发布到 slack 时如何过滤 lambda 中的 SNS 消息内容
- react-native - 如何使用 onPress 和 navigationOptions 在 App.js 中调用 Screen?
- validation - 插入数据时忽略重复的 NULL 字段
- python - 套接字守护线程不停止
- python - PyTorch 中复杂矩阵的行列式
- javascript - 获取元素并多次追加Javascript
- swift - 使用 AVFoundation 和 AVAudioNode 如何获取一个音频源并将其路由到多个目的地?
- c++ - 为什么我在 C++ 中收到此错误消息(错误:无法转换 'std::__cxxll::string' )