谈谈Python在工作中的应用

最近在一些地方用到了Python,在这里总结一下。

首先要明确的是:语言是为工作服务的。这样就不太容易陷入xx是宇宙最好的语言这种无聊的比较和讨(si)论(bi)之中。而且大牛们基本上都精通多种语言,能根据不同的应用场景采用不同语言来实现架构或业务目标。

从大学到工作,使用过不少语言,因此能够理解这一点。在众多的脚本语言中,个人比较偏爱Python,遇到问题时首先会考虑用Python解决,虽然主要项目还是用Java(Spring)来构建。

Python的特点

1.简单,非常容易学习。不过Python2和Python3在语法上比较分裂,虽然Python3是趋势,但目前很多系统上默认的实现都是Python2。如果工作偏运维多一些,则选择Python2较好,如果工作偏开发多,Python3更好。

2.文本处理很方便。如果不熟悉awk,Python用来处理文本还是非常简单的:


with open("xxx.log", "r") as f:
     for line in f.readlines():
           print line.strip("\n").slipt("\t")[0]

虽然相对于awk,代码还是多了些。但对比Java,三行就实现了一个拆列的功能,已经非常好了。

3.HTTP请求简单。requests 是我见过的所有HTTP请求库中最简单,最容易使用的。

import requests

res = requests.get(url)  # 直接产生get请求
print res.text # 打印返回结果
print res.json() # 如果返回的数据是json结构的,直接打印出Json数据

如果是多线程进行请求,容易发生链接数不够用的情况,可以用以下办法处理:

import requests
s = requests.session()
s.keep_alive = False # Connection的keep_alive 为false能减少链接资源消耗
s.get(url)

4.多线程简单。Python多线程个人的感觉是比较适合处理IO密集的任务,例如文本/HTTP请求,不适合做计算密集的任务。主要是Python的GIL设计,使得计算密集多线程无法有效利用多核。但在IO密集的任务上,Python的多线程还是很有用的。

def doGet(url, name):
    s = requests.session()
    s.get(url)

thread_num = 10
threads=[]
for i in xrange(num):
    url = "xxx"
    t = threading.Thread(target=doGet, args=(url, i))
    threads.append(t)

for t in threads:
    t.start()
for t in threads:
    t.join()  #需要注意join函数的功能,主要是阻塞主线程

以上十几行代码就能写一个多线程处理的请求了。

5.数据分析(数据可视化)和机器学习。这方面Python有很多高级库可以使用,但是目前业务对这方面接触不多,所以此处不展开。

工作使用

在日常工作中,十分建议使用类Unix系统进行开发,例如Ubuntu/Mac等。它们里面一般自带有Python解释器,不需要安装就可以使用。但Windows上就需要安装了。

Python自带有命令行,但不是很好用,这里推荐安装ipython,并使用jupyter notebook。它们用来做一些简单的工具或者处理一些文本、HTTP请求问题,真是相当方便。

如果还要做机器学习相关方面的研究,建议安装Anaconda,该工具已经把几乎能用的到的库都封装了,就再也不用为Python的库烦恼了(Python的各种库兼容是一个非常坑爹的问题,虽然有virtualenv可以隔离,有时还是觉得不够方便)。

    原文作者:承羿
    原文地址: https://www.jianshu.com/p/94a6c054e367
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞