1. 一个 Python 小项目的小结

    2019-08-14 Wed
    By xiayf

    前段时间临时接手一个 Python 小项目,这个项目实现的类似一个管控平台,其中核心功能是为算法同学提供机器学习模型训练任务的全流程管理,平台后端基于 Flask 框架实现,前端基于 Ant Design Pro 实现。

    代码稍微有些乱,所以做了部分代码的重构,在此做点经验小结。

    1、并行化或异步化

    部分请求处理逻辑,由于比较耗时,故使用线程池来加速,或者使用独立线程异步处理,或者先存储一个中间状态,由后台定时任务来完成实际的处理工作。对于异步处理结果,前端通过轮询来获取。

    线程池的使用,主要使用 map 方法:

    from multiprocessing.dummy import Pool
    
    input_list = [...]
    pool: Pool = Pool(len(input_list))
    pool.map(func, input_list)
    pool.close()
    pool.join()
    

    独立线程异步处理 …

    标签: 总结 Python
  2. 修改PyPI源

    使用easy_install或pip安装Python第三方库,默认的源地址是:https://pypi.python.org/simple/ 。使用该源有两个问题:

    1. 国内访问速度较慢

    2. 由于该源使用https协议,若机器上没有安装openssl或ssl配置不对,将导致easy_install或pip访问该源失败

    若想解决这两个问题,可以使用国内的PyPI镜像源。

    http://www.pypi-mirrors.org/ 可以看到国内的PyPI镜像源主要有三个:

    • e.pypi.python.org
    • pypi.douban.com
    • pypi.hustunique.com

    修改easy_install和pip使用的源有两种方式(以Linux上从镜像源e.pypi.python.org下载安装requests为例):

    命令方式:针对一次使用,临时修改

    • easy_install

      easy_install -i http://e.pypi.python.org/simple requests …
  3. 运营开发规范化

    今年3月底毕业,入职腾讯做运营开发,至今6个月有余。入职之时组内仅有1个运营开发的同事,到目前已扩充到5人,加3个实习生。

    入职之时的运营开发过程是这样的:

    1. 在办公机器(Windows)上编写代码,功能测试通过后,
    2. ssh远程连接到生产服务器(Linux),vim打开一个新文件,复制办公机器上的代码,粘贴到vim中,保存,
    3. 打开浏览器测试上线的功能/效果是否正确,若不正确,
    4. 直接在生产服务器上编辑代码文件,直到达到需要的功能效果,
    5. 再从生产服务器上将修改后的代码复制粘贴到办公机器(也许不会有这一步,之后所有的修改都直接在生产服务器上操作)。

    这个过程存在如下问题:

    1. 代码没有版本控制
    2. 没有与生产服务器一致的测试环境
    3. 代码部署过程繁琐
    4. 办公开发机器上代码很可能比生产服务器上代码还旧
    5. 上面4点都会导致混乱

    除此之外,当团队从1人扩充到多人后,不可避免地会遇到协作的问题,解决代码开发协作问题一般涉及如下几方面:

    1. 使用代码版本控制
    2. 规定版本控制的工作流
    3. 编码规范
    4. 项目/代码文档
    5. 定期code review

    为了解决上述问题,我陆续地做了如下工作:

    搭建Gitlab服务器、测试服务器

    个人认为开发工作规范化的第一点就是版本控制,基于版本控制可以完成很多自动化的任务。

    平时个人的代码、文档都通过Git版本控制存放在Github上 …

  4. Y分钟学会Python(译)

    原文:Learn Python in Y Minutes

    译者:youngsterxyf

    Python由Guido Van Rossum发明于90年代初期,是目前最流行的编程语言之一,因其语法的清晰简洁我爱上了Python,其代码基本上可以 说是可执行的伪代码。

    非常欢迎反馈!你可以通过推特@louiedinh或louiedinh AT gmail联系我。

    备注:本文是专门针对Python 2.7的,但应该是适用于Python 2.x的。很快我也会为Python 3写这样的一篇文章!

    # 单行注释以井字符开头
    """ 我们可以使用三个双引号(")或单引号(')
        来编写多行注释
    """
    
    
    ##########################################################
    ## 1. 基本数据类型和操作符
    ##########################################################
    
    # 数字
    3 #=> 3
    
    # 你预想的数学运算
    1 + 1 #=> 2
    8 - 1 #=> 7
    10 * 2 #=> 20
    35 …
    标签: Python 翻译
  5. 搭建测试服务器(源码编译方式)

    目前工作中开发流程还比较初级,甚至连测试服务器都没有,代码的变更都是直接先在开发人员的本地机器上简单测试一下,然后直接部署到生产服务器上,这就相当于生产服务器同时充当了测试服务器的角色,虽然开发的是面向公司内部的系统,但作为一个有理想有追求的码农,是不允许这样粗糙混乱的开发流程的,所以申请了台服务器,自己搭建个测试服务器。

    由于公司的服务器统一使用SUSE Linux Server操作系统,并且版本较老。与Ubuntu、Centos等Linux发行版不同,SUSE Linux没有可用的软件源(不知是否与OpenSUSE的软件源兼容?),即没法使用系统的软件包管理工具。这样问题就很多了。

    我选择源码编译的方式来安装所有涉及的软件。也许有人会说,为什么不在网络上查找RPM包然后安装呢?那么先想一下RPM包本质上是个什么东西呢?RPM包(以及DEB包)其实就是将编译好的一些程序以一定的规则打包在一起,然后系统的包管理工具(yum、zypper)按照相同的规则(在依赖满足的情况下)将RPM包里文件复制到指定好的目录里。如果RPM包的依赖没有解决,是无法成功安装的。即使安装好了,若程序依赖的动态链接库等不存在或版本不匹配,也是无法正确运行的,比如libc库的版本过低,但明显你不能轻易替换libc库,因为系统中已安装的很多程序都依赖于libc库。那么相比源码编译方式,RPM包方式的问题更难解决。

    需要安装的软件有Nginx、PHP、MySQL、Memcached、Redis、Mongodb …

  6. argparse - 命令行选项与参数解析(译)

    原文:argparse – Command line option and argument parsing

    译者:youngsterxyf

    argparse模块作为optparse的一个替代被添加到Python2.7。argparse的实现支持一些不易于添加到optparse以及要求向后不兼容API变化的特性,因此以一个新模块添加到标准库。

    与optparse相比较

    argparse的API类似于optparse,甚至在很多情况下通过更新所使用的类名和方法名,使用argparse作为一个简单的替代。然而,有些地方在添加新特性时不能保持直接兼容性。

    你必须视情况决定是否升级已有的程序。如果你已编写了额外的代码以弥补optparse的局限,也许你想升级程序以减少你需要维护的代码量。若argparse在所有部署平台上都可用,那么新的程序应尽可能使用argparse。

    设置一个解析器

    使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数。那么当你的程序运行时,该解析器就可以用于处理命令行参数。

    解析器类是 ArgumentParser 。构造方法接收几个参数来设置用于程序帮助文本的描述信息以及其他全局的行为或设置。

    import argparse
    parser = argparse.ArgumentParser(description='This is a PyMOTW sample program')
    

    定义参数

    argparse是一个全面的参数处理库。参数可以触发不同的动作,动作由 add_argument …

    标签: Python 翻译
  7. pip install lxml编译失败问题解决

    以前在遇到这个问题时,都是偷懒使用sudo apt-get install python-lxml(Debian系的Linux发行版)直接安装已打包好的deb包。但一方面这样安装的不是最新的库,另一方面我希望把所有的Python第三方库都限制在virtualenv中使用,所以希望使用pip install lxml,那么这个问题就必须解决了。

    Google了一把,在这里找到了解答。

    其实在编译失败的log里,已经有提示:

    make sure the development packages of libxml2 and libxslt are installed
    

    所以正确编译需先安装libxml2和libxslt这两个包。

    sudo apt-get install libxml2
    sudo apt-get install libxslt
    

    另外,还需安装Python开发包python-dev:

    sudo apt-get install python-dev
    

    OK,再执行pip …

    标签: Python
  8. Python格式字符串(译)

    原文:Python String Format

    译者:youngsterxyf

    每次使用Python的格式字符串(string formatter),2.7及以上版本的,我都会犯错,并且有生之年,我想我都理解不了它们的文档。我非常习惯于更老的 % 方法。所以着手编写自己的格式字符串手册。若你有一些其他好的示例请告知我。

    格式字符串手册

    数字格式化

    下面的表格展示了使用Python的后起新秀str.format()格式化数字的多种方法,包含浮点数格式化与整数格式化示例。可使用 print("FORMAT".format(NUMBER)); 来运行示例,因此你可以运行: print("{:.2f}".format(3.1415926)); 来得到第一个示例的输出。

    数字格式输出 描述
    3.1415926 {:.2f} 3.14 保留小数点后两位
    3.1415926 {:+.2f …
    标签: Python 翻译

Page 1 / 3