在我们日常写程序的过程中,免不了与文件系统打交道,各种开发语言都提供了与文件系统交互的指令函数,比如Python中的os模块,就提供了许多这样的指令函数,今天就以创建文件夹为例,来说一下,如果用的不当,会带来的线程安全问题。

在Python的os模块中,创建文件夹有两种方式,一个是os.mkdir(),另外一个是os.makedirs(),这两个的区别如下:

os.mkdir() 函数:os.mkdir(path, mode=0o777)

使用模式mode创建名为path的目录。如果目录已经存在,则抛出异常FileExistsError。

在一些系统中,可以忽略mode,在一些平台可以通过调用chmod()来指定它们。mode就是所创建目录对应的文件及文件夹的读写权限,可以参考Linux命令下的chmod命令来理解。

os.makedirs()函数:os.makedirs(path, mode=0o777, exist_ok=False)

递归目录创建函数,和mkdir()很像,但是所有中间级目录都要包含叶目录。

递归创建目录,题中应有之意即路径中哪一层不存在,则自动创建。

区别于os.mkdir(path, mode=0o777),只创建最后一层的目录。

path:所要创建的目录

参数mode传递给mkdir();

如果exist_ok是False(默认),当目标目录(即要创建的目录)已经存在,会抛出一个OSError。

具体使用实例如下:

在上图/data/zzz文件夹下没有任何文件夹,我们现在就来创建一个名为a的文件夹:

这时a文件夹已经存在,我们再执行一下上次的指令函数:

这时就会报错,如果程序中没有处理异常,或者异常之后没有做补偿措施,那么会对业务系统中的某个方面会有一些影响,虽然影响不是很大,但是我们完全可以通过编程语言提供的其他函数,进行系统完善,下面就用os.makdirs(),来避免上面的错误:

从上图中可以看出,如果os.makedirs()使用参数exist_ok的默认值,也就是exist_ok=False,还是会报[Errno 17] File exists的错误,这时就要用exist_ok=True,这样如果文件夹存在,会忽略创建文件夹。也有人会用os.mkdir()这样写程序,就是加一个判断,如果文件夹存在,才去用os.mkdir()去创建文件夹,如果这个方法没有加锁,那么就会带来线程安全问题,就是两个或者多个线程同时进入创建文件夹的只指令处,也会发生抛出异常的现象,如果加锁了,也会对该方法性能方面有些影响,况且锁使用不好,容易把自己都给锁死,所以还是使用编程语言提供的函数去正确的编程。这两个还有一个区别就是是否支持递归创建文件夹:

可见os.mkdir()不支持递归创建文件夹,只有父层文件夹存在时,才能创建子层文件夹,而os.makedirs()是支持递归创建文件夹的。

linux递归创建文件夹_Python中并发请求创建文件夹带来的线程安全问题相关推荐

  1. python3 读取文件夹_python读取listPython3如何检查文件或文件夹是否存在?

    如何检查一个文件或者文件夹存在?有几种方法,Python2和Python3版本也有不同,这是在文件操作中常用到的方法,只有文件存在我们才可以继续对文件进行处理,下面总结了常用的检查文件是否存在的方法. ...

  2. python批量生成文件夹_python实现批量获取指定文件夹下的所有文件的厂

    本文实例讲述了python实现批量获取指定文件夹下的所有文件的厂商信息的方法.分享给大家供大家参考.具体如下: 功能代码如下: import os, string, shutil,re import ...

  3. 如何在cmd运行python文件夹_python怎么在cmd运行文件夹

    学习Python的人都知道数组是最常用的的数据类型,为了保证程序的正确性,需要调试程序. 因此,需要在程序中控制台中打印数组的全部元素,如果数组的容量较小,例如 只含有10个元素,采用print命令或 ...

  4. 安卓手机如何打开php文件夹,Android_Android中调用系统的文件浏览器及自制简单的文件浏览器,调用系统自带的文件浏览器- phpStudy...

    Android中调用系统的文件浏览器及自制简单的文件浏览器 调用系统自带的文件浏览器这很简单: /** 调用文件选择软件来选择文件 **/ private void showFileChooser() ...

  5. 如何恢复计算机中被隐藏的文件夹,电脑中病毒后,文件与文件夹被隐藏,如何恢复正常显示。...

    电脑中病毒后,文件与文件夹被隐藏,右键属性中[隐藏]复选框为灰色,恢复正常显示方法如下: [开始]-[运行]-输入:CMD,进入命令行窗口: 1.进入目录: cd d: 2.取消本目录下所有文件与文件 ...

  6. python 异步文件读写_Python中使用asyncio 封装文件读写

    前言 和网络 IO 一样,文件读写同样是一个费事的操作. 默认情况下,Python 使用的是系统的阻塞读写.这意味着在 asyncio 中如果调用了 f = file('xx') f.read() 会 ...

  7. java判断是否文件夹_java中怎么判断是否文件夹

    java判断是否是文件夹的方法:package com.tij.io.file; import java.io.File; /** * 检查File对象是文件还是目录 * @author guoyou ...

  8. python找不到指定文件夹_python找不到指定文件

    python3.5.3 windows10 需要使用pydub整合音频文件,但是pydub需要的libav or ffmpeg.都下载不下来 代码:from pydub import AudioSeg ...

  9. 解决无法显示所有文件和文件夹,无法显示隐藏文件和文件夹

    无法显示所有文件和文件夹,无法显示隐藏文件和文件夹 今日,在公司用的电脑中毒了,按照往常习惯,在文件夹选项中设置显示所有文件和文件.可今天却不听话了,将文件夹选项中选成"显示所有文件和文件夹 ...

最新文章

  1. 澳大利亚多地热浪来袭 最高温度超40摄氏度
  2. 做人应该知道的十个道理
  3. 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 3 Car detection
  4. 什么是SAP HANA Database Procedure(数据库过程)
  5. k8s secret使用_Java Secret:使用枚举构建状态机
  6. 【转】dcmtk程序包综述(1)!!!!!!
  7. linux服务器重启为啥重新新增端口,Linux服务器上新增开放端口号
  8. convert mysql_MySQL的CONVERT()
  9. HAOI 2006 受欢迎的牛 (洛谷2341)
  10. 类似纪念碑谷的unity2d素材包_《纪念碑谷》:引领小清新风格的2.5D插画风游戏...
  11. linux内核登录不上,在嵌入式板上启动linux内核后,用root登录不了
  12. java.sql.SQLException: 列名无效
  13. mysql 1436,Mysql Error Code : 1436 Thread stack overrun
  14. 真正的人工智能能实现吗_如何实现真正的人工智能
  15. 手机坏了微信聊天记录怎么恢复?不用怕,用这招
  16. 扔掉塑料手环吧!有多高科技不重要,美才是重点
  17. 开机显示被调用的对象已与其客户端断开连接,解决方案亲测有效
  18. PXE实现无人值守安装
  19. java 发送Email BY 163.com
  20. 【图像识别】【读论文】模式识别方法概论模式识别及其在图像处理中的应用

热门文章

  1. 数据结构与算法之判断一棵树是否为搜索二叉树、判断一棵树是否是完全二叉树
  2. 如何存储 Git 大文件?
  3. SICC大会发布银行、保险用户报告——详解C2B下的服务创新
  4. nginx之rtmp模块引用计数设计
  5. kubernetes1.8.4安装指南 -- 3. 安装docker ce
  6. mysql之慢查询详解,mysqldumpslow的使用
  7. 利剑无意之scala小考核
  8. 值得收藏的时间复杂度速查表:数据结构操作、排序算法、图操作、堆操作
  9. verilog入门笔记
  10. dart系列之:还在为编码解码而烦恼吗?用dart试试