我只是想知道python的模块filelock的具体细节及其在一些情况下的行为。
首先,线程如何处理with:语句。如果多个线程调用with:,它是否被一个线程地锁定?两个线程也有可能同时获得锁吗?
第二,当我使用with:时,必须在使用它之后清除锁吗?在完成with:语句之后,锁会自动清除吗?
第三,我的代码中有一个实例,其中我认为必须创建一个文件,然后立即锁定。目前我使用的是:
channel_file = open(os.path.join('channels', username), 'w+')
with filelock.FileLock(os.path.join('channels', username)):
channel_file.write(json.dumps({'rate': reobj.group(1),'time': reobj.group(2)}))如果有可能在文件创建后,另一个线程就可以读取该文件,这会防止这种情况发生吗?
这也提出了第四点。使用with:时,filelock锁是否读取访问
发布于 2017-01-30 06:15:27
acquire()的调用都会增加锁计数器,并且在计数器为零时将获得OS级别的文件锁。类似地,每次对release()的调用都将减少锁定计数器,并在计数器达到零时解锁文件。
因此,如果两个线程同时获得锁,则该进程将在OS级别上锁定文件一次,锁计数器将增加2。两个线程将不会彼此阻塞.。with:的目的是在其作用域退出后自动获取和释放锁。见What is the python "with" statement designed for?。threading.Lock对线程进行locking.in __main__或在某个地方。channel_lock = threading.Lock() #在工作线程中使用channel_lock: with (.)as channel_file: channel_file.write(.)有关实现细节,您可以参考py-filelock。
https://stackoverflow.com/questions/41929054
复制相似问题