【心得体悟】第一次带团队 - 技术篇

前情提要

接了一个任务,升级 Python 2 到Python 3,主要有三个难点:

  • 自己单独开一个小队伍,带两个新人上手该项目。角色有所转变,从冲锋陷阵,变成统筹指挥。
  • Python 脚本总共有约100+个,有一些是常用的,有一些是不常用的甚至是不用的。需要一个个进行分析。工作量大。
  • Python 2 -> Python 3 升级中可能遇到的坑。

上一篇 讲了带团队的一些心得。这一篇主要说技术上的难点。

分析脚本生效性

首先第一个问题:100多个脚本,是不是每一个都是生效的?有没有一些已经过时了,不用了的?
很明显,如果已经过时了的,我们就不用花费时间和精力去更新了。

为了回答这个问题,有两个思路:

  1. 逐一查看每一个脚本,从其功能判断,是否还在被使用。(相当于是 Brute-force search
  2. 寻找脚本被调用的地方,如果某一个脚本不再被调用了,那么基本可以确定已经过时了。(类似于 GC 的原理)

实际操作的时候,我先使用了方法2,快速缩小范围,在一天内总结出一个列表。以便让后续人员跟进。

然后,我使用了方法1,在接下来的一周左右,利用空闲时间见缝插针地对脚本进行分析。平均下来一天看十几个脚本左右,强度还可以。

检索脚本调用情况

值得一提的是,在寻找脚本被调用情况的时候,我遇到了难题:任务量太大,太繁琐。

  • 在测试环境,我们的脚本是人工调用的。 -> 这个可以凭经验和文档得到。没有问题。
  • 在生产环境,我们的脚本是通过 AutoSys 调用的。 -> 这个需要通过一个非常老旧的 UI 检索得到。

AutoSys 是一个商业产品,用来做 job scheduler ,负责 application 的启停调度等。

具体可以参看以下的两个链接:

我们公司基于 AutoSys 这套工具自己做了一个 UI ,但是这个 UI 非常的不好用, query 起来很费劲。如果要一个一个 query ,查询上百次,那简直让人头皮发麻。

而且,关键问题在于,这个 UI 只支持 job_name -> script_name 的检索,而不支持反向的 script_name -> job_name 检索。而我需要做的,恰恰就是反向检索。

于是我开始想办法了。
首先,AutoSys 既然是成熟的商业产品,应该是支持类似的检索的。(否则也太 low 了)
其次,这些 job, script 等信息,一定是存在了某个地方,而且很有可能是文件格式。(我在 DB 中从来没有看到相关的表)
所以,一定有办法,只不过我还不知道。

遇事不决读文档,我上 AutoSys 的官网 仔仔细细地 读了一遍文档。终于发现了解决办法!

登录目标 server ,运行通过如下命令,可以抓取到需要的信息,然后再 grep 一下就搞定啦!

-- query job details, including scripts
autorep -J %JOB_PATTERN% -q > ~/my_job_detail.txt

-- query job status, actively used or not
autorep -J %JOB_PATTERN% -d > ~/my_job_status.txt

OK!

Python 升级中的注意事项

1.python -> python3

2.需要对一些第三方 lib 包进行升级,比如 sqlalchemy

3.一些常规模块的路径发生了变化,比如:

from email.MIMEMultipart import MIMEMultipart
->
from email.mime.multipart import MIMEMultipart

4.一些自定义模块的引用路径需要特定指明,比如:

import custom_utils
-> 
from . import custom_utils

5.方法调用时的括号不能省略

print 'hello' -> print('hello')

6.String 和 Binary data 是两种不同格式的数据,需要使用 decode 相互转化。

stdout = execute(command)
->
stdout = execute(command).decode()

7.一些功能模块不再适用,需要适用新的功能,如 os.listdir(path) -> glob.glob(path)

8.对于模糊定义的 list ,在循环的时候需要 cast 一下转成 list 。

for k in somelist.keys():...
-> 
for k in list(somelist.keys()):...

9.缩进 indension 需要注意,是用 tab 还是 space ,要统一。

posted @ 2021-04-09 21:24  MaxStack  阅读(7)  评论(0编辑  收藏  举报