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 简单的自动化
如果你可以轻松地使用一个定时任务(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数据处理(九)之自动化与规模化的更多相关文章
- Python数据处理PDF
Python数据处理(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1h8a5-iUr4mF7cVujgTSGOA 提取码:6fsl 复制这段内容后打开百度网盘手机A ...
- 参考《Python数据处理》中英文PDF+源代码
在实际操作中掌握数据处理方法,比较实用.采用基于项目的方法,介绍用Python完成数据获取.数据清洗.数据探索.数据呈现.数据规模化和自动化的过程.主要内容包括:Python基础知识,如何从CSV.E ...
- Python数据处理pdf (中文版带书签)、原书代码、数据集
Python数据处理 前言 xiii第1 章 Python 简介 11.1 为什么选择Python 41.2 开始使用Python 41.2.1 Python 版本选择 51.2.2 安装Python ...
- python数据处理书pdf版本|内附网盘链接直接提取|
Python数据处理采用基于项目的方法,介绍用Python完成数据获取.数据清洗.数据探索.数据呈现.数据规模化和自动化的过程.主要内容包括:Python基础知识,如何从CSV.Excel.XML.J ...
- python数据处理PDF高清电子书
点击获取提取码:jzgv 内容简介 本书采用基于项目的方法,介绍用Python完成数据获取.数据清洗.数据探索.数据呈现.数据规模化和自动化的过程.主要内容包括:Python基础知识,如何从CSV.E ...
- python入门以及接口自动化实践
一.Python入门必备基础语法# 标识符:python中我们自己命名的都是标识符# 项目名 包名 模块名# 变量名 函数名 类名# 1:字母 下划线 数字组成 命名的时候不能以数字开头# 2:见名知 ...
- 《Python自动化测试九章经》
Python是当前非常流行的一门编程语言,它除了在人工智能.数据处理.Web开发.网络爬虫等领域得到广泛使用之外,他也非常适合软件测试人员使用,但是,对于刚入行的测试小白来说,并不知道学习Python ...
- 最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)
1. 前言 上篇文章 聊到 Python 处理 Mysql 数据库最常见的两种方式,本篇文章继续说另外一种比较常用的数据库:Sqlite Sqlite 是一种 嵌入式数据库,数据库就是一个文件,体积很 ...
- 初学Python(九)——函数
初学Python(九)--函数 初学Python,主要整理一些学习到的知识点,这次是函数. 函数定义: # -*- coding:utf-8 -*- #函数的定义 def my_function(x) ...
- Python 数据处理库 pandas 入门教程
Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...
随机推荐
- win10系统下office 2019激活
1.新建一个文本文件,创建批处理文件office.bat @echo off (cd /d "%~dp0")&&(NET FILE||(powershell sta ...
- Hive和HBase整合用户指南
本文讲解的Hive和HBase整合意思是使用Hive读取Hbase中的数据.我们可以使用HQL语句在HBase表上进行查询.插入操作:甚至是进行Join和Union等复杂查询.此功能是从Hive 0. ...
- web资源图分析
随着请求数增加,吞吐量没有增大,服务器仍然可以处理,那就是带宽问题 Web资源图是从服务器的角度进行统计分析的,和事务图是两个纬度. 1,每秒点击数 每秒点击数( Hits per Second)统计 ...
- Android学习笔记Log类输出日志信息
Log类提供的方法 代码示例 .. Log.e(TAG,"[错误信息]"); Log.w(TAG,"[警告信息]"); Log.i(TAG,"[普通信 ...
- SFTP协议生成公共秘钥文件
[步骤] 1 ssh方式登录服务器 2 执行命令生成秘钥对 ssh-keygen -t rsa 然后给秘钥文件命名 3.查看当前目录的.ssh目录是否有authorized_keys文件 如果有则把新 ...
- Linux下搭建redis(源码编译)
[准备环境] Linux centos7 redis下载包 地址:http://www.redis.cn/download.html 前往下载稳定版本 [步骤] 1.下载成功后 把包上传到服务器 ...
- 【asp.net core 系列】- 11 Service层的实现样板
0.前言 在<asp.net core 系列>之实战系列中,我们在之前的篇幅中对项目有了一个大概的认知,也搭建了一个基础的项目骨架.那么就让我们继续完善这个骨架,让它更加丰满.这一篇,我将 ...
- jni 字符串的梳理
1.实现的功能是java层传递一个字符串到c层2.c层首先将jstring类型转换成char*类型3.c层对字符串进行处理之后,将处理之后的char*类型转换成jstring类型返回给上层的 pack ...
- 【String注解驱动开发】你了解@PostConstruct注解和@PreDestroy注解吗?
写在前面 在之前的文章中,我们介绍了如何使用@Bean注解指定初始化和销毁的方法,小伙伴们可以参见<[Spring注解驱动开发]如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!& ...
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...