文章背景:
在公司工作时与后端开发同事合作开发了算法自动化测试Web平台,具体有什么些功能,工作原因需要保密。大部分基础服务都是PHP语言开发的,算法测试的主要工作楼主用的Python语言Django+Celery+Tensorflow+OpenCV。
~~~~~~~~~该篇文章没有干货,请勿食用~~~~~~~~~
1、耗时长的接口(不确定响应时长)应该用异步任务执行,否则体验会很差,当然你也会被架构师喷得体无完肤,也有可能遭到前端的唾弃。比如:下载/上传批量文件、执行算法脚本、批量对N多数量进行绑定或向数据库写入大批量文件;
2、所有的接口参数都应该做验证,不能因为工期紧就不重视,虽然我们编码时都是先写主要的功能业务逻辑,但是主动做与测试测出bug完全不一样,这完全反映出你的代码水平,稍微懂点开发的测试就可以唾弃你,你的绩效就是这样没的;
3、本地开发环境和SIT、UAT环境一定要区分开,使用同一套配置进行管理,切换环境尽可能简单,越简单越好,否则管理的地方太多,某个地方忘记修改,产生一堆问题,感觉水平好差劲哦;
4、项目部署和资源申请一定要提早进行;资源申请不仅要考虑当前的情况,而且还要考虑未来半年一年的扩展性,申请中一定要写详细需要什么样的环境,什么机器配置,是否需要CUDA,是否需要GPU等等;
5、如果接口没有返回你想要得到的结果,不用质疑,一定代码有问题没得跑了;
6、任何人都是不值得信任的(工作完成OR未完成),所有的一定要自己亲自去尝试,去验证;
7、问题要尽早暴露,越早越好;
8、Redis或者其他服务账号密码会因为含有特殊字符而连接错误——此时读取变量和参数时,可使用parse.quote(password) ,如果配置文件是.ini结果 ,可用configparser.RawConfigParser()
import configparser
# 读取ini文件
cf = configparser.RawConfigParser()
cf.read(UWSGI_INI)
value = cf.get('uwsgi', 'password')
password = parse.quote(value)
9、Django与Cerlery共用一个日志器时,需要在Cerlery的tasks.py中重新加载一下日志器:
dictConfig(LOGGING) # 重新加载日志配置文件
logger = logging.getLogger('django') # 获取日志器
10、等待补充中....