1 前沿

1.1 适合自动化的任务

每周二输出一些新的分析结果,编制一份报告,并发送给相关方

其他部门或同事需要能够在没有你的指导和支持下运行报告工具和清洗工具

每周进行一次数据下载、清洗和发送

每次用户请求新报告,报告脚本需要运行,并且在报告生成后通知用户

你需要每周清洗一次数据库里面的错误数据,并将其备份到其他地方

1.2 不适合自动化的任务

任务很少发生,并且非常复杂,自己做更好

任务的成功输出很难确定

任务需要与人交互来确定合适的完成方式

任务是成功的当务之急

2 自动化步骤

文档化下面的问题

a.任务开始时间

b.任务是否有时间限制或最大长度?如果有,什么时候结束

c.对任务,有哪些必要的输入

d.对任务,什么是成功什么是部分成功

e.任务失败,应该发生什么

f.任务产生或提供什么?面向谁?以何种方式

g.任务结束后应该发生什么

自动化基本步骤

a.定义你的问题集合,将其分解为更小的工作块

b.精确地描述每一个子任务的输入是什么、输入做什么以及需要什么来确认任务完成

c.确定哪里可以得到输入,以及何时运行任务

d.开始编码你的任务,用真实或样例数据测试

e.整理你的任务和脚本,添加文档

f.添加日志,聚焦于调试错误和记录成功的任务

g.提交你的代码到仓库中,手动测试它,按照需要作出修改

h.通过将手动任务替换为自动化任务,为自动化准备脚本

l.在任务开始自动化后,关注日志和警报。修正所有的错误和bug。更新你的测试和文档

m.为日志中的错误检查频率制定一个长期计划

一个运行良好的自动化任务集合需要一些时间来完成,但是结果通常比那些需要一直关注、修改和监控的一次性脚本要好

3 出错点

可能的错误

a.数据库连接错误导致丢失或损坏数据

b.脚本漏洞和错误,任务没有正确完成

c.来自网站或API的超时错误或者过多的请求错误

d.边界问题,报告的数据或一部分没有保证一直,导致脚本错误

e.服务器负载问题或其他硬件问题

f.时间不当,竞争条件

构建弹性自动化系统的方式

以特定的时间间隔重复失败的任务

确保你的代码有很多try ... except 代码块,让它能够处理错误

在处理到机器、数据库或API的连接的代码周围,构建特殊的异常代码块

定期维护和监控你为自动化使用的机器

使用测试数据定期测试你的任务和自动化程序,确保它们正常执行

注意脚本中出现的依赖、竞争条件和API规则,根据这些知识编写代码

使用类似requests和multiprocessing的库

4.在哪里自动化

5.自动化的特殊工具

5.1 使用本地文件、参数及配置文件

a.使用本地文集那作为输入和输出的时候,要确保脚本可以每天运行在相同的机器上,或者可以简单地与输入和输出文件一起迁移

b.为敏感的信息创建本地配置文件

通常情况下,我们在仓库内的一个独立文件夹存储配置文件

c.在自动化程序中传递命令行参数。这些参数传递关于脚本应该如何运行的信息

5.2 使用云

云这个名词通常用来代表一个资源共享池,例如服务器

如果数据太大,不能在自己的计算机上执行,或者程序需要很长的时间执行,云都是一个很好的处理方式

a.使用Git部署Python

5.3 使用并行处理

并行处理对脚本自动化来说是一个很棒的工具,让你可以在一个脚本中运行多个并发进程。

5.4 使用分布式处理

分布式处理,它分发进程到多台机器上(不同于发生在一台机器上的并行处理) 
5.5 简单的自动化

如果你可以轻松地使用一个定时任务(corn job)自动化工作,绝不要浪费时间过度工程化它,或者让它变得更加复杂。

6.1 CronJobs

Cron(http://en.wikipedia.org/wiki/Cron)是一个基于 Unix 系统的任务调度工具,用来使用服务器日志和管理工具运行脚本
6.2 Web接口

如果你需要脚本、爬虫或者报告任务按需执行,一个简单的解决方案是直接构建一个 Web接口,人们可以登录进去并点击按钮执行任务。
6.3 Jupyter notebook

7 大规模自动化

如果系统需要多台机器或者服务器来处理,或者报告是关于一个分布式系统或者其他事件驱动系统的,很可能你会需要比 Web 接口、notebook 和 corn 更加健壮的工具。
7.1Celery:基于队列的自动化

7.2 Ansible:操作自动化
如果你当前的规模需要 Celery 帮助管理任务,很可能你同样需要一些帮助,来管理其他的服务和操作。

8 监控自动化程序

花费时间监控自动化程序是必需的。如果你不知道任务是否完成了,或者不知道任务成功还是失败了,你最好还是不要运行它们了。因此,监控你的脚本和运行它们的机器是过程中非常重要的一部分。
8.1 Python日志
8.2 添加自动化信息
发送报告、跟踪脚本、通知自己错误的一个简单方式是使用邮件或者其他直接从脚本发送的信息

它会产生一个报告,并将报告发送到特定的收件人列表。
它有一个清晰的成功 / 失败信息。
它与其他的合作者或同事相关。
它提供了不易在网站或快速指示板上查看的结果

8.2.1. 邮件

8.2.2. 短消息服务(SMS)和语音

8.2.3. 集成聊天

如果你想要集成聊天室到警报系统中,或者你的团队或合作者普遍使用聊天室,有很多Python 聊天室工具可用

8.3 上传和其他报告

如果你需要上传报告或图片到独立的服务或文件分享作为自动化的一部分,有很多很棒的
工具。如果这是一种在线的形式,或者一个需要与之交互的网站,建议使用
Selenium 爬取技巧。如果这是一个 FTP 服务器,Python 有一个标准 FTP 库(https://docs.
python.org/2/library/ftplib.html)。如果需要发送报告给一个 API,或者通过 Web 协议发送,
你可以使用 requests 库,如果需要发送 XML,你可以
使用 LXML

8.4 日志和监控服务

如果一个脚本满足不了需求,或者你想将自动化程序合并到一个大型的组织框架中,你可
能需要研究将日志和监控作为一个服务的技术。有很多公司通过创建工具和系统来跟踪日
志,致力于让数据分析师和开发者的生活更简单。这些工具通常有非常简单的 Python 库,
将日志和监控信息发送到它们的平台。

8.4.1. 日志和异常
基于 Python 的日志服务提供了打印日志到一个中心服务的能力,同时让你的脚本在一系列不同的机器上运行,无论是本地机器还是远程机器。

Abrake(https://airbrake.io/languages/python_bug_tracker)和 Rollbar(https://rollbar.com)。Airbrake 最开始是一个基于 Ruby 的异常跟踪器,现在开始支持 Python

还有拉取和解析日志的服务,例如 Loggly(https://www.loggly.com/)和 Logstash(https://www.elastic.co/products/logstash)。这些服务允许你在聚合的日志级别上监控它们,同样也
可以解析、搜索以及在日志中寻找问题

 8.4.2. 日志和监控

如果你有分布式机器或者正在集成脚本到公司或大学的基于 Python 的服务器环境,你可能
想要更健壮的监控,不仅仅是针对 Python,而是整个系统。有很多服务提供了系统数据库负载监控、Web 应用程序的监控,同样也有自动化任务的监控。

New Relic(http://newrelic.com/)是这方面最流行的服务之一,它可以监控服务器和系统进程,也可以监控 Web 应用程序。

另外一个系统和应用监控服务是 Datadog(https://www.datadoghq.com/)。Datadog 允许你整合许多服务(https://www.datadoghq.com/product/integrations/)到一个报告板中。

无论你使用什么监控器,也无论你是决定构建自己的监控器还是使用一个服务,拥有规律的警报、深入了解你使用的服务、理解代码和自动化系统的完整性是非常重要的。

9 没有万无一失的系统

python数据处理(九)之自动化与规模化的更多相关文章

  1. Python数据处理PDF

    Python数据处理(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1h8a5-iUr4mF7cVujgTSGOA 提取码:6fsl 复制这段内容后打开百度网盘手机A ...

  2. 参考《Python数据处理》中英文PDF+源代码

    在实际操作中掌握数据处理方法,比较实用.采用基于项目的方法,介绍用Python完成数据获取.数据清洗.数据探索.数据呈现.数据规模化和自动化的过程.主要内容包括:Python基础知识,如何从CSV.E ...

  3. Python数据处理pdf (中文版带书签)、原书代码、数据集

    Python数据处理 前言 xiii第1 章 Python 简介 11.1 为什么选择Python 41.2 开始使用Python 41.2.1 Python 版本选择 51.2.2 安装Python ...

  4. python数据处理书pdf版本|内附网盘链接直接提取|

    Python数据处理采用基于项目的方法,介绍用Python完成数据获取.数据清洗.数据探索.数据呈现.数据规模化和自动化的过程.主要内容包括:Python基础知识,如何从CSV.Excel.XML.J ...

  5. python数据处理PDF高清电子书

    点击获取提取码:jzgv 内容简介 本书采用基于项目的方法,介绍用Python完成数据获取.数据清洗.数据探索.数据呈现.数据规模化和自动化的过程.主要内容包括:Python基础知识,如何从CSV.E ...

  6. python入门以及接口自动化实践

    一.Python入门必备基础语法# 标识符:python中我们自己命名的都是标识符# 项目名 包名 模块名# 变量名 函数名 类名# 1:字母 下划线 数字组成 命名的时候不能以数字开头# 2:见名知 ...

  7. 《Python自动化测试九章经》

    Python是当前非常流行的一门编程语言,它除了在人工智能.数据处理.Web开发.网络爬虫等领域得到广泛使用之外,他也非常适合软件测试人员使用,但是,对于刚入行的测试小白来说,并不知道学习Python ...

  8. 最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)

    1. 前言 上篇文章 聊到 Python 处理 Mysql 数据库最常见的两种方式,本篇文章继续说另外一种比较常用的数据库:Sqlite Sqlite 是一种 嵌入式数据库,数据库就是一个文件,体积很 ...

  9. 初学Python(九)——函数

    初学Python(九)--函数 初学Python,主要整理一些学习到的知识点,这次是函数. 函数定义: # -*- coding:utf-8 -*- #函数的定义 def my_function(x) ...

  10. Python 数据处理库 pandas 入门教程

    Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...

随机推荐

  1. 关于mybatis使用小于号大于号出错的解决方案

    原文链接:https://blog.csdn.net/weixin_38061311/article/details/99943807 mybatis 使用的xml的映射文件, 所以里面的标签都是在& ...

  2. WEditor(元素定位工具)安装和定位界面元素

     1. 安装adb(安装方法——百度网盘(无邪)) 2. 安装python-uiautomator2 pip install --pre -U uiautomator2 3. 手机设备安装atx-ag ...

  3. LeetCode 77,组合挑战,你能想出不用递归的解法吗?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第46篇文章,我们一起来LeetCode中的77题,Combinations(组合). 这个题目可以说是很精辟了,仅仅 ...

  4. MFC_VC++_时间获取与保存列表控件内容到文件操作方法

    MFC_VC++_时间获取与保存列表控件内容到excel文件操作方法 void CDataView::OnBnClickedBtnExporttoexcel() { CTime time = CTim ...

  5. 通过el-tree 实现每次可选中一个节点方案(非checkbox)

    <el-tree v-if="orgDrawer" :data="orgTree" size="medium" ref="o ...

  6. 宝塔面板成功部署Django项目流程

    宝塔面板部署Django项目完整流程 上线Django项目记录,超简单,避免无意义的踩坑! 第一步:安装python管理器 在宝塔在线面板安装“python项目管理器” 第二步:安装适配python版 ...

  7. 尚硅谷maven视频教程笔记

    07.尚硅谷_Maven_部署Maven核心程序.avi 第一步先安装jdk 第二步下载maven 特别需要注意的是maven不能存储在有中文和空格的目录下面 3.调试是否安装成功,在cmd中输入 m ...

  8. redis高级命令4 持久化机制 、事务

    redis的事务是支持很简单,基本没有啥用我们来看下面的列子 我们开启一个事务,在事务中执行了age 加1,set a4 ,还有对一个字符串进行加一,对字符串加1导致了事务失败,按道理incr age ...

  9. java List的初始化

    今天在处理生成excel的时候用到了java的list,但是需要直接赋值固定的几个变量,如果先初始化然后add的方法: List<String> name = new ArrayList( ...

  10. 【状压dp】Bzoj1294 围豆豆

    题目 Input 第一行两个整数N和M,为矩阵的边长. 第二行一个整数D,为豆子的总个数. 第三行包含D个整数V1到VD,分别为每颗豆子的分值. 接着N行有一个N×M的字符矩阵来描述游戏矩阵状态,0表 ...