我有一个小型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()
我希望脚本能够在没有出错的情况下等待"打开"如果该文件已由另一个相同代码的进程打开,那么该行将在另一个进程完成后读取该文件并关闭该文件。
如果存在其他解决方案,则为其他内容。
答案 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...