python数据处理(九)之自动化与规模化

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 简单的自动化

6.1 CronJobs

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

6.3 Jupyter notebook

7 大规模自动化

7.1Celery:基于队列的自动化

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

8 监控自动化程序

发送报告、跟踪脚本、通知自己错误的一个简单方式是使用邮件或者其他直接从脚本发送的信息

它提供了不易在网站或快速指示板上查看的结果

8.2.1. 邮件

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

8.2.3. 集成聊天

Python 聊天室工具可用

8.3 上传和其他报告

使用 LXML

8.4 日志和监控服务

将日志和监控信息发送到它们的平台。

不同的机器上运行,无论是本地机器还是远程机器。

rollbar.com)。Airbrake 最开始是一个基于 Ruby 的异常跟踪器,现在开始支持 Python

可以解析、搜索以及在日志中寻找问题

 8.4.2. 日志和监控

想要更健壮的监控,不仅仅是针对 Python,而是整个系统。有很多服务提供了系统数据库负载监控、Web 应用程序的监控,同样也有自动化任务的监控。

程,也可以监控 Web 应用程序。

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

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

9 没有万无一失的系统