• 【Multiprocessing系列】Multiprocessing基础

    Posted by : lon.y@qq.com on 2017年7月4日

    multiprocessing是Python的标准模块,它既可以用来编写多进程,也可以用来编写多线程。如果是多线程的话,用multiprocessing.dummy即可,用法与multiprocessing基本相同,这里主要介绍多进程的用法,欢迎纠错。 (一)Multiprocessing介绍 为什么要使用python多进程? 因为python使用全局解释器锁(GIL),他会将进程中的线程序列化,也就是多核cpu实际上并不能达到并行提高速度的目的,而使用多

    阅读全文...

  • python 协程 3:用仿真实验学习协程

    Posted by : lon.y@qq.com on 2017年7月4日

    前两篇我们已经介绍了python 协程的使用和yield from 的原理,这一篇,我们用一个例子来揭示如何使用协程在单线程中管理并发活动。。 什么是离散事件仿真 Wiki上的定义是: 离散事件仿真将系统随时间的变化抽象成一系列的离散时间点上的事件,通过按照事件时间顺序处理事件来演进,是一种事件驱动的仿真世界观。离散事件仿真将系统的变化看做一个事件,因此系统任何的变化都只能是通过处理相应的事件来实现,在两个相邻的事件之间,系统状态维持前一个事件发生后的状态

    阅读全文...

  • Python + Django 如何支撑了 7 亿月活用户的 Instagram…

    Posted by : lon.y@qq.com on 2017年7月4日

    图:Instagram Loves Python PyCon 简介 PyCon 是全世界最大的以 Python 编程语言为主题的技术大会。大会由 Python 社区组织,每年举办一次。在大会上,来自世界各地的 Python 用户与核心开发者齐聚一堂,共同分享 Python 世界的新鲜事、Python 语言的应用案例、使用技巧等等内容。 Instagram 简介 Instagram 是一款移动端的照片与视频分享软件,由 Kevin Systrom 和 Mik

    阅读全文...

  • 如何构建一个分布式爬虫:基础篇

    Posted by : lon.y@qq.com on 2017年7月4日

    继上篇我们谈论了Celery的基本知识后,本篇继续讲解如何一步步使用Celery构建分布式爬虫。这次我们抓取的对象定为celery官方文档。 首先,我们新建目录distributedspider,然后再在其中新建文件workers.py,里面内容如下 from celery import Celery app = Celery('crawl_task', include=['tasks'], broker='redis://223.129.0.190:63

    阅读全文...

  • 超详细的 Python 实现新浪微博模拟登陆(小白都能懂)

    Posted by : lon.y@qq.com on 2017年7月4日

    最近由于需要一直在研究微博的爬虫,第一步便是模拟登陆,从开始摸索到走通模拟登陆这条路其实还是挺艰难的,需要一定的经验,为了让朋友们以后少走点弯路,这里我把我的分析过程和代码都附上来。 首先,我们先用正常的账号登陆,具体看会有些什么请求。这里我用的是Http Analyzer抓包(Filders也是一个不错的选择)。下面是正常登陆流程的截图: 图1 接下来我会详细说明各个过程。 第一步:预登陆。 现在微博、空间等大型网站在输入用户名后基本都会做编码或者加密处

    阅读全文...

  • 如何构建一个分布式爬虫:理论篇

    Posted by : lon.y@qq.com on 2017年7月4日

    前言 本系列文章计划分三个章节进行讲述,分别是理论篇、基础篇和实战篇。理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较完整且足够健壮的分布式微博爬虫。通过这三篇文章,希望大家能掌握如何构建一个分布式爬虫的方法;能举一反三,将celery用于除爬虫外的其它场景。目前基本上的博客都是教大家使用scrapyd或者scrapy-redis构建分布式爬虫,本系列文章会从另外一个角度讲述

    阅读全文...

  • Python 中的垃圾回收机制

    Posted by : lon.y@qq.com on 2017年7月4日

    GC作为现代编程语言的自动内存管理机制,专注于两件事:1. 找到内存中无用的垃圾资源 2. 清除这些垃圾并把内存让出来给其他对象使用。GC彻底把程序员从资源管理的重担中解放出来,让他们有更多的时间放在业务逻辑上。但这并不意味着码农就可以不去了解GC,毕竟多了解GC知识还是有利于我们写出更健壮的代码。 引用计数 Python语言默认采用的垃圾收集机制是『引用计数法 Reference Counting』,该算法最早George E. Collins在1960

    阅读全文...

  • 字典对象的 Pythonic 用法(上)

    Posted by : lon.y@qq.com on 2017年7月4日

    字典对象在Python中作为最常用的数据结构之一,和数字、字符串、列表、元组并列为5大基本数据结构,字典中的元素通过键来存取,而非像列表一样通过偏移存取。笔者总结了字典的一些常用Pyhonic用法,这是字典的Pythonic用法的上篇 0. 使用 in/not in 检查 key 是否存在于字典 判断某个 key 是否存在于字典中时,一般初学者想到的方法是,先以列表的形式把字典所有键返回,再判断该key是否存在于键列表中: dictionary = {}

    阅读全文...

  • 完全理解 Python 迭代对象、迭代器、生成器

    Posted by : lon.y@qq.com on 2017年7月4日

    本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文的中译版本,推荐阅读原文,谢谢网友指正。 在了解Python的数据结构时,容器(container)、可迭代对象(iterable)、迭代器(iterator)、生成器(generator)、列表/集合/字典推导式(list,set,dict comprehension)众多概念参杂在一起,

    阅读全文...

  • Python 函数中,参数是传值,还是传引用?

    Posted by : lon.y@qq.com on 2017年7月4日

    在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码。 代码段1: def foo(arg): arg = 2 print(arg) a = 1 foo(a) # 输出:2 print(a) # 输出:1 看了代码段1的同学可能会说参数是值传递。 代码段2: def bar(args): args.append(1) b = [] print(b)# 输出:[] print(id(b

    阅读全文...