在Python中,try块中的每个操作都是原子的吗?

时间:2017-01-04 21:43:59

标签: python multithreading operating-system

python文档说在多线程环境中,EAFP方法优于LBYL。

是否存在多线程失败的情况? 我的意思是说我想从目录中读取文件。 我可以这样写:

try:
    with open('Path/to/file', 'r') as content_file:
        content = content_file.read()
except ... :

是否有一种方法可以在程序读取文件时将其删除?

2 个答案:

答案 0 :(得分:3)

  

try中的每个操作是否都是Python中的原子?

不,try没有添加任何形式的原子性。它所做的就是确保exceptfinally子句在适当时执行。

  

是否有一种方法可以在程序读取文件时将其删除?

是的,您可能会失去对该文件的访问权限(例如,如果它位于网络文件系统上,并且您在阅读时网络连接中断)。也就是说,无论您的程序是否是多线程的,都可能发生这种情况,因此线程在这里并没有真正改变。

答案 1 :(得分:2)

  

try try中的每个操作都是原子

没有。重点是"请求许可,然后做事情"绝对不是原子的,而取决于操作和所需的原子程度,"做事情"单独可能是原子的。