gpt4 book ai didi

Python flask 如何避免同时访问多个文件(文件互斥)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:29 25 4
gpt4 key购买 nike

我目前正在使用 python flask 开发一个数据处理网络服务器(linux)。

一般的工作流程是:

  1. 从用户那里获取一个输入文件(由 python flask 处理)
  2. Flask 将此输入文件传递给 java 程序
  3. Java 程序处理此输入文件,将输出(多个文件)保存在服务器上。
  4. Flask 调用另一个 python 脚本来处理这些输出以获得最终结果并将结果返回给客户端。

问题是:在第 3 步和第 4 步之间,存在一些中间文件,如果这是一个本地程序,这根本不是问题。但是作为一个服务器程序,当多个客户端访问这个程序时,他们可能会得到由同时使用该 web 程序的另一个用户提供的输入生成的意外结果。

在我看来,这是一种文件访问的互斥问题。我之前遇到过线程互斥问题,我使用线程锁解决了其中一些问题,例如 java 中的同步和 python 中的锁,但我不确定在文件而不是线程方面该怎么做。

我想到也许我可以根据不同的客户端生成不同的文件副本。但据我所知,HTTP 是无状态的,因此您无法真正知道谁在访问服务器。我不想添加登录系统和用户数据库来实现此目的,因为我觉得有一种更简单更好的方法来解决此问题。

这几天我一直在寻找一个好的解决方案,但没有找到一个理想的解决方案,所以我在这里寻找一些建议。任何建议将不胜感激。如果您可以提出可行的解决方案,请随时提供您的姓名,以便我可以在该工具发布时将您添加到有关该工具的数字和纸质出版物的感谢名单中。

最佳答案

作为一个系统型的人,我建议你这样做

https://docs.python.org/3/library/fcntl.html#fcntl.lockf

这就是我要解决的问题,有很多方法可以解决这个问题,而且还有待讨论,当然很难找到最好的解决方案

假设输出文件是冲突发生的地方

所以你锁定文件并继续轮询直到资源被释放(用户需要等待)所以你强制一个用户一次访问文件(这里轮询 time.sleep)大约 2-3 秒(添加一个try except) here 仅当资源释放时,输出文件上的线程锁才会被下一个用户进程正常通过。

另一种简单的方法是将数据转储到像 mysql 或 postgres 这样的 rds 中,它将处理并发请求中发生的所有文件访问噩梦(将输出文件放入数据库中)。

关于Python flask 如何避免同时访问多个文件(文件互斥)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45669015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com