首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 运维中使用并发

今天从大哥手里接了一个需求:

验证一下新的 Docker 镜像仓库(Docker Registry)是否迁移成功了

简单粗暴的方法就是拿到老仓库中的镜像列表(Image List),在新仓库模拟用户重新拉取(pull)一遍来验证,我们开始

subprocess

如果我们用Shell来写,执行 Docker 命令很容易,直接写就是了,但是对结果的判断就不那么友好了(Shell 大神忽略),那么 Python 呢,如何优雅的执行 Linux 命令呢?这里我们用到了一个Python 标准库(standard module) :

importsubprocess

我们都知道,命令执行过程中会有标准输出(stdout)和标准错误(stderror):

上面代码封装了一个方法,它会启动一个子进程执行命令,并将标准输出和标准错误通过管道(进程间通信最常用的方式)收集

管道其实就是文件描述符对,子进程会继承父进程中的所有文件描述符

最后,通过序列解包:

stdout,stderr=run_cmd('uname -a')

获取标准输出和标准错误,这个方法我们后面要用到好多

我拿到镜像列表文件了,先使用

catimagelistwc-l

查看了一下行数(镜像数量),4254 个,还行,不算太多

思路:

拉取列表中的镜像,拉取成功后将其删除并标记为成功

拉取失败就标记为失败和并记录错误

如果拉取超时,就标记超时

如何标记呢,因为我们将会使用多进程,多个进程间通信还是蛮麻烦的,这里偷个懒:直接使用 append 模式直接将结果写入文件

withopen('timeout_image.txt','a')astimeout_file:timeout_file.write(image)

我们先写出如何验证一个镜像的逻辑:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180110G03ZJ000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券