在Python中并发访问数据文件

时间:2016-02-29 21:10:45

标签: python file concurrency

我有一个小型Web服务器在POST请求上执行某些操作。它读取数据文件,进行一些检查,然后重新保存文件,从中添加一些信息。

我遇到的问题是,如果两个客户端几乎同时发出POST请求,则两个客户端都将读取相同的文件,然后一个将写入包含新信息的文件,然后另一个客户端将写入该文件包含其新信息,但没有来自其他客户的信息,因为该部分在读取时不在文件中。

f = open("foo.txt", "r+")
tests_data = yaml.safe_load(f)
post_data = json.loads(web.data())
#Some checks

f.write(json.dumps(tests_data))
f.close()

我希望脚本能够在没有出错的情况下等待"打开"如果该文件已由另一个相同代码的进程打开,那么该行将在另一个进程完成后读取该文件并关闭该文件。

如果存在其他解决方案,则为其他内容。

1 个答案:

答案 0 :(得分:3)

标准锁定不符合您的需求吗?锁需要在模块级别。

from threading import Lock
# this needs to be module level variable
lock = Lock 

with lock:
    # do your stuff.  only one thread at a time can
    # work in this space...