Pycon2014 @Shanghai


时间:2014年11月6日

地点:上海浦东新区博云路2号浦软大厦


学习Python也有一段时间了,大约一个月之前在微博上看到Pycon2014的消息,当时就很激动地报名。幸运的是,今年的Pycon对学生免费,那我更不能错过了。

今年的Pycon在张江的浦软大厦举行,从早上九点到下午六点结束,中间提供午餐和茶歇。

1.Python中的进程,线程,协程,同步,异步,回调

来自七牛云存储的许智翔讲师。这是一位大神,我完全是在听天书。他详细的内容在V2EX上已经有分享,点此链接

回来以后复习了一下廖雪峰老师Python入门讲的相关知识:要实现多任务,我们通常 会设计Master-Worker模式,其中Master负责分配任务,Worker负责执行任务,因此多任务环境下通常是一个Master多个Worker。常见的情况是:多进程实 现Master-Worker(主进程为Master,其他进程为Worke),多线程实现Master-Worker(主进程为Master,其他线程为Worker)。多进程的优点是稳定性好,但是创建进程的代价较大并且OS同时运行的进 程数是有限的且进程间的调度也颇有难度。多线程的优点是比多进程要快那么一点点,但是稳定 性差,一个线程挂掉就有可能导致整个线程挂掉,因为所有的线程共享进程的内存。如Microsoft的的IIS服务器采用多线程模式 ,稳定性不如采用多进程模式 的Apache。一般情况下,I/O密集型我们优先选用多进程,计算密集型我们有限选用多线程。而协 程,又称微线程。

然后,我又从网上看了几篇讲线程进程协程的,有了更加清晰的认识。

  • 进程。操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。进程是程序执行的一个实例 ,担当分配 系统资源的实体。进程创建必须分配一个完整的独立地址空间,并在进程存活的时候不断进行调整,进程创建的时候会占有一部分 内存,进程结束的时候资源会释放出来,来让其他资源使用。进程切换只发生在内核态,两步:1.切换页全局目录以安装一个新的 地址空间 2.切换内核态堆栈和硬件上下文。
  • 线程。线程是进程的一个执行流,是轻量级的进程,是操作系统能够进行运算调度的最小单位。一个进程中可以执行多个 线程,多个线程共享进程内的资源。所以可以将线程可以看成是共享同一虚拟内存以及其他属性的进程 线程相对于进程的优势在于同一进程下的不同线程之间的数据共享更加容易。Python被诟病最多的大概就是解释器全局锁(GIL) 了,GIL 的存在是为了实现 Python 中对于共享资源访问的互斥。而且是非常霸道的解释器级别的互斥。在 GIL 的机制下,一个线程访问解释器之后,其他的线程就需要等待这个线程释放之后才可以访问。这种处 理方法在单处理器下面并没有什么问题,单处理器的本质是无法并行的。但是再多处理器下面,这种方法会导 致无法利用多核的优势。Python 的线程调度跟操作系统的进程调度类似,都属于抢占式的调度。一个进程执行了一定时间之 后,发出一个信号,操作系统响应这个时钟中断(信号),开始进程调度。而在 Python 中,则通过软件 模拟这种中断,来实现线程调度。

  • 协程。协程是用户态的轻量级的线程。协程与线程的区别在于:一旦创建完线程,你就无法决定他什么时候获得时间片,什么时候让 出时间片了,你把它交给了内核。而协程编写者可以有一是可控的切换时机,二是很小的切换代价。 在 Python 中,使用协程来做并发是对于系统资源消耗最小,可以最大化的做高并发,但是,需要我们自己来 做调度,操作系统不会主动调度任务。

2.为何Python适合初创公司?

来自叶剑烨讲师的分享。叶老师从“Python的简与雅”和“Python完整的生态圈”两方面讲了初创公司使用Python的优势。 事实上,真正在大规模使用Python做开发的大公司并不多,无论是FLAGT还是BAT,大家都是在一些方面用Python,用得 最多的还是Java、C++、PHP等,国内豆瓣和知乎算是使用Python的代表,也仅仅是轻量的公司。这次参加Pycon的一个 叫“七感数据”的公司,是在用Python做大数据处理方面的创业,我觉得还蛮吸引人的。从我接触到关于人工智能(包括 ML,DL,NLP,CV等)来看,Python在这方面算得上是出镜最频繁的语言,成为了人工智能领域的首选,所以将来若是有AI方面的 想法,Python应该是首选。

推荐Github:Awesome Python,里面包含各种Python类库,基本可以胜任绝大多数任务。

3.Django历程分享-10things

这是一个Python架站框架Gjango的分享。Python架站随着Ruby的Rails框架而兴起,以全能型的Gjango和轻量型的 Flask、web.py为代表,优势在于fast development,collaboration,maintainability,code reuse,劣势在于performance,realtime。 有收获总有牺牲,Python能够快速架站,代码简洁但是实时交互能力、响应性能要差一些。我们在学习Django等 Python的时候,应该首先从广度入手,了解HTML,CSS,Javascript,SQL等网站基础知识,然后去了解Django框架,根据需求 深入。

4.Python机器学习实践

来自七感数据分析的胡景超讲师,胡老师讲了机器学习的基本流程,以及使用Python进行ML的各种经验,是我最想听到 的最有收获的分享。

Machine Learning是Algorithm learn from data(包括图像、网络行为数据、生物学上的数据等各方面的数据)。 ML主要解决的问题包括“分类模型”,监督学习,需要训练库,如Andrew NG的识猫,“回归模型”,如房价预测,股票预测等,“聚类问题”,非 监督学习,如人人网上的“你可能认识的人”这个功能,等等。

最常见的ML流程图如下所示。这是一个监督学习,首先我们需要采集样本(raw data),预处理,对样本进行特征提取,设计出ML算法,并 通过这些样本(称之为训练库)不断地训练反馈(feedback)来优化算法,获得一个优质的模型。这个时候,我们就可以把新的需要 判别的数据输入训练好的模型中,我们就能得到好的判别结果。进行以预测阿里市值为例,采用ML的的决策树算法,几行代码就可以搞定。 当然,决策树是比较简单的算法,偏差不小,要想取得好的效果,不妨尝试随机森林(Random forests)算法,import RandomForest ,包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定(树之间是没有关联,当测试数据进入随机森林时,其实就是让每一颗决策树进行分类, 最后取所有决策树中分类结果最多的那类为最终的结果)。初步模型设计好以后,还需要进行模型调优。要想让模型更优质,应该尽可能的 去除无关噪声数据,增加样本(一般进行ML至少50个样本吧)等,这也是一个费劲的步骤。

ML算法选择指南。包括关联性规则算法,推荐系统算法(协同过滤等),神经网络算法(深度学习DL,多层感知器MLP)等。我前段时间看到 大家在分享一本《机器学习实战》的书,据说很好,并且代码使用Python写的,等我有空了应该买过来学习。

Python的ML生态圈。包括Python的优势,从业人员和第三方库,学习方法等。

Python在ML有绝对的优势:

  • 人多库多省事
  • 效率不错(比matlab和R效率高)
  • 产品线很全,数据处理-原型建模-可视化-产品化,用Python都很方便(产品线全这一点很重要!)

ML的从业人员可以分为三类:

  • 科学家:数学研究,建模
  • ML工程师:看Paper学习利用已有算法,解决实际问题
  • 数据工程师:清洗数据(其实ML的大数据处理,大部分时间都是在清洗数据),Python在清洗数据上有优势

ML常用的Python第三方Package:

  • numpy/scipy:最基础,常用
  • scikit-learn
  • pandas: 统计分析
  • cpython: 当非常需要效率时

特别推荐Github上的awesome—machinelearning这个repo,包含了很多ML的库

我们学生,可以先看Coursera上面Andrew的machine learning公开课,练习《机器学习实战》上面的例程。更重要的是, 要尝试自己练手,做出点东西出来。拿到数据后,从数据清理、原型建模到可视化,Python都是可以横行无阻的搞定。

5.Python实现数据处理

来自堆糖网的老轮子,主要分享了他们海量数据(图片)处理框架,map()-shuffle—reduce(),Spark的任务处理和 调度等。我没有怎么听明白。大数据处理框架的相关知识HFDS,Mapreduce,Hadoop,Spark,Scala等值得关注。

主办方各方面都考虑得很周到, 还提供了午餐。张江那一片的科技公司很多,环境也不错。

主办方工作人员很辛苦,感谢他们的付出。希望上海多一点技术分析,希望明年还有机会参加2015Pycon。

这一天很累,一早起床倒地铁,到天黑才回到闵大荒。但这更是愉快的的一天,收获很多,人生苦短,Python是岸,学好Python去摧城拔寨吧!


canonxu - 上海交通大学-电子工程系-硕士研究生 编程菜鸟。
Published under (CC) BY-NC-SA in categories Lectures  tagged with Python, mechine learning