多进程 Multiprocessing 模块

Process 类用来描述一个进程对象。创建子进程的时候,只需要传入一个执行函数和函数的参数即可完成 Process 示例的创建。

  • star() 方法启动进程,
  • join() 方法实现进程间的同步,等待所有进程退出。
  • close() 用来阻止多余的进程涌入进程池 Pool 造成进程阻塞。
multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
  • target 是函数名字,需要调用的函数
  • args 函数需要的参数,以 tuple 的形式传入

=======================================================================

Pool

Pool 可以提供指定数量的进程供用户使用,默认是 CPU 核数。当有新的请求提交到 Poll 的时候,如果池子没有满,会创建一个进程来执行,否则就会让该请求等待。 
- Pool 对象调用 join 方法会等待所有的子进程执行完毕 
- 调用 join 方法之前,必须调用 close 
- 调用 close 之后就不能继续添加新的 Process 了

pool.apply_async

apply_async 方法用来同步执行进程,允许多个进程同时进入池子。

pool.apply

apply(func[, args[, kwds]])

该方法只能允许一个进程进入池子,在一个进程结束之后,另外一个进程才可以进入池子。

下面就使用  Multiprocessing  和异步来做一个爬虫例子,直接上代码

  # coding:utf-8

from common.contest import *

def spider(resultList):

    item_url = resultList['item_url']

    headers = {
"cookie":"trctestcookie=ok; __ssid=0b09cf20-bcab-438c-9d06-3346409a800c;
    mp_invaluable_mixpanel=%7B%22distinct_id%22%3A%20%22161c7298aeabc-0da7fd442d45f7-5d1b3316-13c680-161c7298aeba04%22%7D;
     LANG-PROD=en-us; SHOW-ALERT=true; trctestcookie=ok; mp_mixpanel__c=45; afCustomerRef-prod=13LVMZ0E4C; afCustomerID-prod=4119514;
     afRememberMe=true; AZTOKEN-PROD=FAFE3733-2B21-4AC8-B127-3325BAE38594; oas-node-sid=s%3Az-KLM1REtfG-7_mRAJ3HAyv0ZFBbkSwu.
    YNq3143hCV%2FWZz0Zd15Q5g7u8aM6ARLoTOujSQnXSqQ; _gat=1; _ga=GA1.2.1505142091.1519353908;
    _gid=GA1.2.538844093.1519464821; _gat_UA-21191163-1=1; AUTHORIZATION=b3f7a9d1%2D75c3%2D425b%2Db16d%2D262135cf4dfa;
    OASTOKEN-PROD=FAFE3733%2D2B21%2D4AC8%2DB127%2D3325BAE38594; CUSTOMERID=4119514; CUSTOMERREF=13LVMZ0E4C; myinvaluablenav=1;
    _evgn_d902=%7B%22puid%22%3A%22AkLKM_odiDX3b9MMOOYEiDupItJqc6Ji2gO3amra_Qo%22%7D; _evga_d902=da0bcc787c51cd99.04r;
} try:
result = session.get(url=item_url,verify=False,headers=headers).content
except:
result = session.get(url=item_url, verify=False,headers=headers).content soup = BeautifulSoup(result, 'html.parser')
result_div = soup.find_all('div', attrs={"id": "lotPanel1"})[0]
result_replace = replace(result_div) item_desc = re.findall('<b>Description:</b>(.*?)</div><a class="rfi-modal-trigger-link"',result_replace)[0] print item_desc result1 = result.replace('\r\n','').replace('\n','').replace('\r','') hashcode = md5(str(item_url))
create_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
data2 = { "item_desc":str(item_desc),
# "html":str(result), "hashcode": hashcode,
"create_time": create_time,
} null = ""
item_data = (eval(json.dumps(resultList)))
item_data.pop('hashcode')
item_data.pop('create_time')
data_dict = dict(resultList,**data2) dbName = "oversea_invaluable_2017_2_detail_info"
  # 本方法已经封装,插入数据到数据库中去
result1 = insert_data(dbName, data_dict) if __name__ == "__main__":
time1 = time.time()
sql = """ SELECT * FROM `oversea_invaluable_2017_2_no_detail_info` limit 1000 """
  
   #select_data是数据库查询方法,查询结果是 [{},{},{},{}, .........]
resultList = select_data(sql) pool = multiprocessing.Pool(4)
for item in resultList:
pool.apply_async(spider, (item,))
pool.close()
pool.join() print time.time()-time1
多进程虽然为我们爬取网页提供了便利,但是不建议使用,因为这样会对目标网站造成压力,如果时间充足的话,尽量利用单进程慢慢的爬取

python 多线程爬虫 实例的更多相关文章

  1. python多线程爬虫+批量下载斗图啦图片项目(关注、持续更新)

    python多线程爬虫项目() 爬取目标:斗图啦(起始url:http://www.doutula.com/photo/list/?page=1) 爬取内容:斗图啦全网图片 使用工具:requests ...

  2. Python 多进程爬虫实例

    Python  多进程爬虫实例 import json import re import time from multiprocessing import Pool import requests f ...

  3. python多线程爬虫设计及实现示例

    爬虫的基本步骤分为:获取,解析,存储.假设这里获取和存储为io密集型(访问网络和数据存储),解析为cpu密集型.那么在设计多线程爬虫时主要有两种方案:第一种方案是一个线程完成三个步骤,然后运行多个线程 ...

  4. Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)

    1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...

  5. python多线程同步实例分析

    进程之间通信与线程同步是一个历久弥新的话题,对编程稍有了解应该都知道,但是细说又说不清.一方面除了工作中可能用的比较少,另一方面就是这些概念牵涉到的东西比较多,而且相对较深.网络编程,服务端编程,并发 ...

  6. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  7. python 多线程爬虫

    最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术的实现. 1.larbin的URL去重用的很高效的bloom filter算法: 2. ...

  8. Python多线程爬虫爬取网页图片

    临近期末考试,但是根本不想复习!啊啊啊啊啊啊啊!!!! 于是做了一个爬虫,网址为 https://yande.re,网页图片为动漫美图(图片带点颜色........宅男福利 github项目地址为:h ...

  9. Python多线程爬虫详解

    一.程序进程和线程之间的关系 程序:一个应用就是一个程序,比如:qq,爬虫 进程:程序运行的资源分配最小单位, 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知 ...

随机推荐

  1. QMsgPack的用法DEMO

    QMsgPack的用法DEMO 引用单元文件: uses qstring, qmsgpack, qjson; 演示一: procedure TForm2.Button10Click(Sender: T ...

  2. [Android Studio] Android Studio中查看类的继承关系

    转载自:http://blog.csdn.net/hyr83960944/article/details/38098091 查看类的继承关系的快捷键F4,在Android Studio常用快捷键这篇文 ...

  3. Python实现MapReduce,wordcount实例,MapReduce实现两表的Join

    Python实现MapReduce 下面使用mapreduce模式实现了一个简单的统计日志中单词出现次数的程序: from functools import reduce from multiproc ...

  4. 2016年终总结--一个Python程序猿的跨界之旅

    时间过得真快.感觉15年年终总结刚写完,16年就结束了.看了blog,16年就写了可怜的8篇,对我来说16年还算顺风顺水. 真正可能出乎意料的是年底我离开了呆了2年半的龙图游戏,临时放弃了用了3年半的 ...

  5. Android系统信息获取

    在Android中可以通过android.os.Build这个类和System.getProperty(“xxx”);来获取设备信息,下面列举的常见设备信息摘自Android群英传 Build.BOA ...

  6. Cookie && Session之验证实例

    为了防止各种自动登录,以及反作弊和破坏,往往会要求登录时让用户输入随机产生的验证码(这组验证码是一组数字和字母),这样可以起到一定的防止他人利用程序让机器自动反复登录的情况.在PHP下要实现这种功能是 ...

  7. Windows之权限讲解

    windows中,权限指的是不同账户对文件,文件夹,注册表等的访问能力.在windows中,为不同的账户设置权限很重要,可以防止重要文件被其他人所修改,使系统崩溃. 1权限概念 我们可以在控制面板中设 ...

  8. 简单例子快速了解事件处理和委托 event delegate

    以下仅仅是用最简单的方式表示事件,实际应用可能是不同窗体之间相互通知某些操作,达到触发. 首先声明一个degate的 EventHandler 参数可以没有 一个或多个 但是触发和使用一定要匹配. 创 ...

  9. 【转】vim折叠功能

    原文:https://www.yupengsir.com/topic/content?i=140 这个作者的vim系列是高级的用法, 要学习一下. https://blog.easwy.com/arc ...

  10. 文件及文件夹更改通知/监测软件TheFolderSpy

    TheFolderSpy是Windows环境下一个监测文件(夹)更改,删除,创建,重命名的绿色免安装小软件,并在文件及文件夹有更改时发送Email通知管理者 该软件使用.Net开发,所以需要安装.Ne ...