|
|
## 评审目标
|
|
|
|
|
|
```buildoutcfg
|
|
|
1. 实现方案的正确性
|
|
|
2. 代码的坏味道
|
|
|
3. 规范性
|
|
|
```
|
|
|
|
|
|
### 评审日期
|
|
|
|
|
|
```
|
|
|
2021-12-16
|
|
|
```
|
|
|
|
|
|
### 评审人
|
|
|
|
|
|
```
|
|
|
袁波,蒋家升,杨龙斌
|
|
|
```
|
|
|
|
|
|
### 被评审人
|
|
|
|
|
|
```
|
|
|
章一峰
|
|
|
```
|
|
|
|
|
|
### 参考链接
|
|
|
|
|
|
- [代码入口](http://tech.pingansec.com/granite/project-gravel/-/tree/master)
|
|
|
|
|
|
### 流程
|
|
|
|
|
|
```buildoutcfg
|
|
|
1. 被评审人需先整体描述需要解决的问题、解决流程 (被评审人讲解过程中,评审人可以记录问题,不要打断被评审者的思路)
|
|
|
2. 被评审人讲完,评审人和与会人员可以提问题
|
|
|
3. 评审人进行评审 (被评审者或者与会人员记录评审待改进的内容,有时并不是只针对被评审者,而是所有编码者)
|
|
|
4. 评审完成之后,落实待修改项,主要是缺陷和规范性
|
|
|
```
|
|
|
|
|
|
### 值得学习的地方
|
|
|
|
|
|
```buildoutcfg
|
|
|
1. 对于常用的item类型进行封装,减少错误发生,增强不同项目间的一致性
|
|
|
2. 测试环境与生产环境切换的方式比较好,简洁的同时也减少了错误的发生
|
|
|
3. Task类的实现,有简单的单个任务模式,也支持了多线程对同一任务的读写
|
|
|
```
|
|
|
|
|
|
### 建议
|
|
|
|
|
|
- `deploy.sh`部署脚本 [文件地址](http://tech.pingansec.com/granite/project-gravel/-/blob/master/deploy.sh#L64)
|
|
|
- `init`函数中需要先`update_app`,再`update_collie`,否则可能导致`collie_version.txt`文件找不到
|
|
|
- 部署脚本与项目名称的相关性,新的项目需要更改一些参数
|
|
|
|
|
|
|
|
|
- 优先级任务相关的一些问题 [文件地址](http://tech.pingansec.com/granite/project-gravel/-/blob/master/scrapy_spiders/gravel_spiders/spiders/base.py#L52)
|
|
|
- `redis_keys = [i.decode() if isinstance(i, bytes) else i for i in redis_keys] # a bytes-like object is required, not 'str'`
|
|
|
- `redis_key = random.choice(self.redis_key)`
|
|
|
- `for循环不应该覆盖变量`
|
|
|
- `redis_key = self._random_priority(p_map) # 缩进错误`
|
|
|
- `index = ''`
|
|
|
|
|
|
|
|
|
- `parse_response`相关的建议 [文件地址](http://tech.pingansec.com/granite/project-gravel/-/blob/master/scrapy_spiders/gravel_spiders/spiders/P12315/query.py#L16)
|
|
|
- 不易测试,如果引入测试用例,建议将`parse_response`和`parse_text`分开。
|
|
|
- `parse_response`接收response对象并在内部调用`parse_text`解析文本,主要进行逻辑控制,重试,返回Item对象,返回其他请求。
|
|
|
- `parse_text`接收文本,返回简单的python列表或字典。可能解析会用到meta中的信息,需要完善。
|
|
|
- 测试用例就只测试请求类的`parse_text`方法。
|
|
|
|
|
|
|
|
|
- `check_task_end`方法是否应该直接返回Item对象 [文件地址](http://tech.pingansec.com/granite/project-gravel/-/blob/master/scrapy_spiders/gravel_spiders/spiders/request_mixin.py#L68)
|
|
|
|
|
|
|
|
|
- `retry_or_error`方法涉及到`yield self` [文件地址](http://tech.pingansec.com/granite/project-gravel/-/blob/master/scrapy_spiders/gravel_spiders/spiders/P12315/query.py#L24)
|
|
|
- 可以用`yield self.copy()`返回一个新的对象,之前的对象就会结束
|
|
|
|
|
|
|
|
|
- 文件引入方式混用
|
|
|
- [建议统一使用项目绝对路径](http://tech.pingansec.com/granite/project-gravel/-/blob/master/scrapy_spiders/gravel_spiders/spiders/base.py)
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
### 改进落实
|
|
|
|
|
|
```buildoutcfg
|
|
|
时间:
|
|
|
|
|
|
改进人:
|
|
|
|
|
|
监督人:
|
|
|
``` |