爬虫

URL管理器:管理待爬取的url集合和已爬取的url集合,传送待爬取的url给网页下载器。
网页下载器(urllib):爬取url对应的网页,存储成字符串,传送给网页解析器。
网页解析器(BeautifulSoup):解析出有价值的数据,存储下来,同时补充url到URL管理器。


Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据。

urllib.request库

from urllib import request
headers = { 'User-Agent': 'Mozilla/5.0 Chrome/64.0.3282.186 Safari/537.36', }
url = 'http://www.baidu.com'
req = request.Request(url, headers=headers)
response = request.urlopen(req)
data = response.read().decode('UTF-8')
print(data)

一,获取整个页面数据一,获取整个页面数据一,获取整个页面数据一,获取整个页面数据一,获取整个页面数据一,获取整个页面数据

#coding=utf-8

import urllib
def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html
html = getHtml("http://tieba.baidu.com/p/2738151262")
print html

首先,我们定义了一个getHtml()函数:
urllib.urlopen()方法用于打开一个URL地址。
read()方法用于读取URL上的数据,向getHtml()函数传递一个网址,并把整个页面下载下来。执行程序就会把整个网页打印输出。

二,筛选页面中想要的数据二,筛选页面中想要的数据二,筛选页面中想要的数据二,筛选页面中想要的数据二,筛选页面中想要的数据

import re
import urllib
def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html
def getImg(html):
    reg = r'src="(.+?\.jpg)" pic_ext'
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html)
    return imglist
html = getHtml("http://tieba.baidu.com/p/2460150866")
print getImg(html)

我们又创建了getImg()函数,用于在获取的整个页面中筛选需要的图片连接。re模块主要包含了正则表达式:
re.compile() 可以把正则表达式编译成一个正则表达式对象.
re.findall() 方法读取html 中包含 imgre(正则表达式)的数据。
运行脚本将得到整个页面中包含图片的URL地址。

三,将页面筛选的数据保存到本地三,将页面筛选的数据保存到本地三,将页面筛选的数据保存到本地三,将页面筛选的数据保存到本地

把筛选的图片地址通过for循环遍历并保存到本地,代码如下:

#coding=utf-8

import urllib
import re
def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html
def getImg(html):
    reg = r'src="(.+?\.jpg)" pic_ext'
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html)
    x = 0
    for imgurl in imglist:
        urllib.urlretrieve(imgurl,'%s.jpg' % x)
        x+=1
        return imglist
html = getHtml("http://tieba.baidu.com/p/2460150866")
print getImg(html)



************************https://www.cnblogs.com/zhaof/p/6910871.html
************************https://www.cnblogs.com/zhaof/tag/%E7%88%AC%E8%99%AB/
URL解析函数的重点是将URL字符串拆分为其组件,或者将URL组件组合为一个URL字符串。
urllib.parse。urlparse(allow_fragments urlstring方案=”= True)


urlunpars
其实功能和urlparse的功能相反,它是用于拼接


urljoin
这个的功能其实是做拼接的

from urllib.parse import urljoin

print(urljoin('http://www.baidu.com', 'FAQ.html'))
print(urljoin('http://www.baidu.com', 'https://pythonsite.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', 'https://pythonsite.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', 'https://pythonsite.com/FAQ.html?question=2'))
print(urljoin('http://www.baidu.com?wd=abc', 'https://pythonsite.com/index.php'))
print(urljoin('http://www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com#comment', '?category=2'))


[Requests]
**************************https://www.cnblogs.com/tangdongchu/p/4229049.html

Requests

Requests模块安装 pip install requests

HTTP请求类型

get类型

r = requests.get('https://github.com/timeline.json')

post类型

r = requests.post("http://m.ctrip.com/post")

put类型

r = requests.put("http://m.ctrip.com/put")

delete类型

r = requests.delete("http://m.ctrip.com/delete")

head类型

r = requests.head("http://m.ctrip.com/head")

options类型

r = requests.options("http://m.ctrip.com/get")

获取响应内容

print r.content #以字节的方式去显示,中文显示为字符
print r.text #以文本的方式去显示

URL传递参数

payload = {'keyword': '日本', 'salecityid': '2'}
r = requests.get("http://m.ctrip.com/webapp/tourvisa/visa_list", params=payload)
print r.url #示例为http://m.ctrip.com/webapp/tourvisa/visa_list?salecityid=2&keyword=日本

获取/修改网页编码

r = requests.get('https://github.com/timeline.json')
print r.encoding
r.encoding = 'utf-8'

json处理

r = requests.get('https://github.com/timeline.json')
print r.json() #需要先import json

定制请求头

url = 'http://m.ctrip.com'
headers = {'User-Agent' : 'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19'}
r = requests.post(url, headers=headers)
print r.request.headers

复杂post请求

url = 'http://m.ctrip.com'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload)) #如果传递的payload是string而不是dict,需要先调用dumps方法格式化一下

post多部分编码文件

url = 'http://m.ctrip.com'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)

响应状态码

r = requests.get('http://m.ctrip.com')
print r.status_code

响应头

r = requests.get('http://m.ctrip.com')
print r.headers
print r.headers['Content-Type']
print r.headers.get('content-type') #访问响应头部分内容的两种方式

Cookies

url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)
r.cookies['example_cookie_name'] #读取cookies

url = 'http://m.ctrip.com/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies) #发送cookies

设置超时时间

r = requests.get('http://m.ctrip.com', timeout=0.001)

设置访问代理

proxies = {
"http": "http://10.10.10.10:8888",
"https": "http://10.10.10.100:4444",
}
r = requests.get('http://m.ctrip.com', proxies=proxies)


任务队列TaskQueue

TaskQueue的中文翻译是“任务队列”,顾名思义,它的作用就是把一些“任务”存储在队列中,
然后再从队列中取出任务并执行。由于队列是FIFO(先进先出),所以任务队列具有有序性。
该功能包括两个类:Task任务类,TaskQueue任务队列类
其中TaskQueue负责:
1、开始任务
2、添加任务
3、清空任务
4、开始任务回调
5、完成队列中所有任务回调
6、下一个任务
7、当前任务进度
8、队列存储所有任务


python队列Queue

Queue

Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,
即队列,用来在生产者和消费者线程之间的信息传递


基本FIFO队列

class Queue.Queue(maxsize=0)

FIFO即First in First Out,先进先出。
Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限。
一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。

offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个
NoSuchElementException异常


task_done()

意味着之前入队的一个任务已经完成。由队列的消费者线程调用。
每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。

如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。


join()

阻塞调用线程,直到队列中的所有任务被处理掉。

只要有数据被加入队列,未完成的任务数就会增加。
当消费者线程调用task_done()(意味着有消费者取得任务并完成任务),未完成的任务数就会减少。
当未完成的任务数降到0,join()解除阻塞。


put(item[, block[, timeout]])
将item放入队列中。

1.如果可选的参数block为True且timeout为空对象(默认的情况,阻塞调用,无超时)。
2.如果timeout是个正整数,阻塞调用进程最多timeout秒,如果一直无空空间可用,抛出Full异常(带超时的阻塞调用)。
3.如果block为False,如果有空闲空间可用将数据放入队列,否则立即抛出Full异常
其非阻塞版本为put_nowait等同于put(item, False)


empty()

如果队列为空,返回True,反之返回Fals


python——BeautifulSoup库函数find_all()

find_all( name , attrs , recursive , string , **kwargs )

find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件


Pool :

pool = pool.Pool(2)
变量 几个进程
功能:创建进程池;
参数: processes 进程池中进程的数量;


apply_async()

功能: 将异步的方式要执行的事件放入进程池;

参数:
func 要执行的函数
args 给函数按位置传参
kwds 给函数按照键值传参
返回值: 返回事件执行后的返回值对象,可以通过调用get()函数获取事件函数return的内容;get() 函数获取事件函数return内容;


close()

功能:关闭进程池,使其不能再加入新的事件;

#!/usr/bin/python3

import multiprocessing as mp
from time import sleep
import os

def worker(msg):
    sleep(2)
    print(msg)
    return 'worker msg' + msg

创建进程池对象,进程池中包含4个进程

pool = mp.Pool(processes = 4)

result = []
for i in range(10):
msg = 'hello %d'%i
#像进程池加入要执行的事件
r = pool.apply_async(worker,(msg,))
#pool.apply(worker,(msg,))
result.append(r)

print(result)

获取每个事件函数的返回值

for res in result:
    print(res.get())

#关闭进程池事件加入通道,即不能再向进程池中加入事件
pool.close()
#塞等待进程池出来事件结束后回收进程池
pool.join()

创建自己的进程类;
1, 继承Process类以获取原有的属性
2,实现自己需要的功能部分;
3,使用自己的类创建进程即可;

from multiprocessing import Process
import time

class ClockProcess(Process):
    def __init__(self, *args, **kwargs):
        Process.__init__(self)
        self.value = value

    #在proces类中实现,现在重写这个函数
    def run(self):
        n = 5
        while n > 0:
            print('The time is {}'.\
                  format(time.ctime()))
            time.sleep(self.value)
            n -= 1

#s使用自己的进程类创建进程对象
p = ClockProcess(2)
#start后会自动执行run函数
p.start()
p.join()

Cookie

https://www.cnblogs.com/alamZ/p/7407007.html
https://www.cnblogs.com/adc8868/p/7256078.htmls


Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie可以保持登录信息到用户下次与服务器的会话。

Cookie原理

HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制 Cookie是http消息头中的一种属性,包括:

Cookie名字(Name)
Cookie的值(Value)
Cookie的过期时间(Expires/Max-Age)
Cookie作用路径(Path)
Cookie所在域名(Domain),
使用Cookie进行安全连接(Secure)。

前两个参数是Cookie应用的必要条件,另外,还包括Cookie大小(Size,不同浏览器对Cookie个数及大小限制是有差异的)。
Cookie由变量名和值组成,根据 Netscape公司的规定,Cookie格式如下:

Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

Cookie应用

Cookies在爬虫方面最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续。

获取一个有登录信息的Cookie模拟登陆

import urllib2

# 1. 构建一个已经登录过的用户的headers信息
headers = {
    "Host":"www.renren.com",
    "Connection":"keep-alive",
    "Upgrade-Insecure-Requests":"1",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36",
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language":"zh-CN,zh;q=0.8,en;q=0.6",

    # 便于终端阅读,表示不支持压缩文件
    # Accept-Encoding: gzip, deflate, sdch,

    # 重点:这个Cookie是保存了密码无需重复登录的用户的Cookie,这个Cookie里记录了用户名,密码(通常经过RAS加密)
    "Cookie": "anonymid=ixrna3fysufnwv; depovince=GW; _r01_=1; JSESSIONID=abcmaDhEdqIlM7riy5iMv; jebe_key=f6fb270b-d06d-42e6-8b53-e67c3156aa7e%7Cc13c37f53bca9e1e7132d4b58ce00fa3%7C1484060607478%7C1%7C1484060607173; jebecookies=26fb58d1-cbe7-4fc3-a4ad-592233d1b42e|||||; ick_login=1f2b895d-34c7-4a1d-afb7-d84666fad409; _de=BF09EE3A28DED52E6B65F6A4705D973F1383380866D39FF5; p=99e54330ba9f910b02e6b08058f780479; ap=327550029; first_login_flag=1; ln_uact=mr_mao_hacker@163.com; ln_hurl=http://hdn.xnimg.cn/photos/hdn521/20140529/1055/h_main_9A3Z_e0c300019f6a195a.jpg; t=214ca9a28f70ca6aa0801404dda4f6789; societyguester=214ca9a28f70ca6aa0801404dda4f6789; id=327550029; xnsid=745033c5; ver=7.0; loginfrom=syshome"
}

# 2. 通过headers里的报头信息(主要是Cookie信息),构建Request对象
urllib2.Request("http://www.renren.com/", headers = headers)

# 3. 直接访问renren主页,服务器会根据headers报头信息(主要是Cookie信息),判断这是一个已经登录的用户,并返回相应的页面
response = urllib2.urlopen(request)

# 4. 打印响应内容
print response.read()

通常,我们使用Request和Response对象来直接操作 Cookies:

写入Cookies:

Response.Cookies["k1"].Value = "k1Value";
Response.Cookies["k2"]["k2-1"] = "k2-1Value";
Response.Cookies.Add(new HttpCookie("k3", "k3Value"));

读取Cookies:

Request["k1"] ;
Request.Cookies["k1"].Value ;
Request.Cookies["k2"]["k2-1"];
Request.Cookies.Get(0).Value;

注意Request["k1"]这个大家熟悉的获取get和post参数的方法,同时还能够获取Cookies的值!

另外上面语句中的有些是必须通过Value属性访问的,有些则不需要。
Cookies的Path属性
Cookies的Path属性表示当前的Cookies可以作用在网站的那个路径下。


python学习之——selenium元素定位

from selenium import webdriver

定位和操作节点

driver.find_element_by_xpath()#根据xpath路径定位标签(找单个)
driver.find_elements_by_xpath()#根据xpath路径定位标签(找所有)
driver.find_element_by_css_selector()#根据css选择器定位标签
driver.find_element_by_link_text()#根据标签文本内容(完整)
driver.find_elements_by_partial_link_text()#根据标签文本内容(局部)
driver.find_element_by_id()#根据id属性寻找节点
driver.find_element_by_class_name()#根据class属性寻找节点


Xpath

XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历.
XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计.
XPath是一种表达式语言,它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等.

在学习XPath之前你应该对XML的节点,元素,属性,原子值(文本),处理指令,注释,根节点(文档节点),命名空间以及对节点间的关系如:父(Parent),子(Children),兄弟(Sibling),先辈(Ancestor),后代(Descendant)等概念有所了解.

XML? from lxml import etree tag方法可以获取标签名

XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 的标签需要我们自行定义。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准

路径表达式:

表达式 描述

nodename 选取此节点的所有子节点.
/ 从根节点选取.
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置.
. 选取当前节点.
.. 选取当前节点的父节点.
@ 选取属性.


Selenium

Selenium是自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器
selenium:是一个web的自动化测试工具,可以直接运行在浏览器上,但是并不自带浏览器,需要有浏览器驱动,selenium可以根据我们的代码指令,
让浏览器自动加载页面,这时得到的页面源码是经过浏览器渲染之后的,然后我们就可以在页面源码中寻找节点(动态加载的网页,模拟登录)
1.安装 pip install selenium

  1. from selenium import webdriver
    XXXX = webdriver.Chrome()
    XXXX.get('http://www.baidu.com/')
    3.定位和操作节点
    driver.find_element_by_xpath()#根据xpath路径定位标签(找单个)
    driver.find_elements_by_xpath()#根据xpath路径定位标签(找所有)
    driver.find_element_by_css_selector()#根据css选择器定位标签
    driver.find_element_by_link_text()#根据标签文本内容(完整)
    driver.find_elements_by_partial_link_text()#根据标签文本内容(局部)
    driver.find_element_by_id()#根据id属性寻找节点
    driver.find_element_by_class_name()#根据class属性寻找节点
    4.页面的相关操作:
    Selenium 的 WebDriver提供了各种方法来寻找元素,假设下面有一个表单输入框如下:

<input type="text" name="user-name" id="passwd-id">

1).获取id标签值
element = driver.find_element_by_id("passwd-id")
2).获取name标签值
element = driver.find_element_by_name("user-name")
3).获取标签名值
element = driver.find_elements_by_tag_name("input")
4).也可以通过XPath来匹配
element = driver.find_element_by_xpath("//input[@id='passwd-id']")

Cookies操作

获取页面每个Cookies值,用法如下

cookies = driver.get_cookies()
cookie_dict = {i['name']:i['value'] for i in cookies}
print(cookie_dict)
添加cookies

driver.add_cookie(cookie_dict)
删除Cookies,用法如下

删除一个特定的cookie
driver.delete_cookie("CookieName")
删除所有cookie
driver.delete_all_cookies()


beautifulsoup

from bs4 import BeautifulSoup

Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。
它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。

soup 就是BeautifulSoup处理格式化后的字符串,
soup.title 得到的是title标签,soup.p得到的是文档中的第一个p标签,要想得到所有标签,得用find_all函数。
find_all 函数返回的是一个序列,可以对它进行循环,依次得到想到的东西.
get_text() 是返回文本,这个对每一个BeautifulSoup处理后的对象得到的标签都是生效的

四大对象种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

Tag
NavigableString
BeautifulSoup
Comment


pyquery

from pyquery import PyQuery as pq
安装 pip3 install pyquery
注意:由于 pyquery 依赖于 lxml ,要先安装 lxml ,否则会提示失败。
pip3 install lxml

1、.html()和.text() 获取相应的 HTML 块或者文本内容,
2、(selector):通过选择器来获取目标内容,
3、.eq(index):根据索引号获取指定元素(index 从 0 开始)
4、.find():查找嵌套元素,
5、.filter():根据 class、id 筛选指定元素,
6、.attr():获取、修改属性值,
7、其他操作:

 #添加 class
.addClass(value):
 #判断是否包含指定的 class,返回 True 或 False
.hasClass(value):
 #获取子元素
.children():
 #获取父元素
.parents():
 #获取下一个元素
.next():
 #获取后面全部元素块
.nextAll():
 #获取所有不匹配该选择器的元素
.not_(selector):

re 正则表达式

爬虫一共就四个主要步骤:

1).明确目标 (要知道你准备在哪个范围或者网站去搜索)
2).爬 (将所有的网站的内容全部爬下来)
3).取 (去掉对我们没用处的数据)
4).处理数据(按照我们想要的方式存储和使用

目的 给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

1.给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
2.可以通过正则表达式,从字符串中获取我们想要的特定部分。

python模块下的正则表达式

Python 的 re 模块

compile 函数

compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:
    import re
    **将正则表达式编译成 Pattern 对象**
    pattern = re.compile(r'\d+')

用pattern的方法对文本进行匹配查找

。match 方法:从起始位置开始查找,一次匹配
。search 方法:从任何位置开始查找,一次匹配
。findall 方法:全部匹配,返回列表
。finditer 方法:全部匹配,返回迭代器
。split 方法:分割字符串,返回列表
。sub 方法:替换

amatch 只是查找字符串的头部(也可以查找制定的位置)

。只是匹配一次,只要匹配到结果就会返回,不会查找全部结果

*******************************https://www.cnblogs.com/yeayee/p/4952022.html

多线程

python提供了两个模块来实现多线程thread 和threading
thread 有一些缺点,在threading 得到了弥补学习threading

threading.Thread参数介绍

target:线程执行的函数

name:线程名称

args:执行函数中需要传递的参数,元组类型 另外:注意daemon参数

1.线程
python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用

2.多线程执行
import threading 首先导入threading 模块,这是使用多线程的前提。
split()可以将一个字符串拆分成两部分,然后取其中的一部分。


多线程爬虫

Queue(队列对象) Queue是python中的标准库,可以直接import Queue引用;
队列是线程间最常用的交换数据的形式

1.初始化: class (FIFO 先进先出)
Queue.Queue(maxsize)
2.包中的常用方法:
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.full 与 maxsize 大小对应
Queue.get(block,timeout)获取队列,timeout等待时间
创建一个“队列”对象
import Queue
myqueue = Queue.Queue(maxsize = 10)
4.将一个值放入队列中

myqueue.put(10)
将一个值从队列中取出
myqueue.get()

多进程

1.进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。不仅可以通过线程完成多任务,进程也是可以的

2.进程的状态
工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态
3.进程的创建-multiprocessing
multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情
4. Process参数如下:

Process(group, target, name, args , kwargs)

target:如果传递了函数的引用,可以任务这个子进程就执行这里的代码
args:给target指定的函数传递的参数,以元组的方式传递
kwargs:给target指定的函数传递命名参数
name:给进程设定一个名字,可以不设定
group:指定进程组,大多数情况下用不到
Process创建的实例对象的常用方法:

start():启动子进程实例(创建子进程)
is_alive():判断进程子进程是否还在活着
join([timeout]):是否等待子进程执行结束,或等待多少秒
terminate():不管任务是否完成,立即终止子进程
Process创建的实例对象的常用属性:

name:当前进程的别名,默认为Process-N,N为从1开始递增的整数
pid:当前进程的pid(进程号)

进程池Pool

multiprocessing.Pool常用函数解析:
apply_async(func[, args[, kwds]]) :使用非阻塞方式调用func(并行执行,堵塞方式必须等待上一个进程退出才能执行下一个进程),args为传递给func的参数列表,kwds为传递给func的关键字参数列表;
close():关闭Pool,使其不再接受新的任务;
terminate():不管任务是否完成,立即终止;
join():主进程阻塞,等待子进程的退出, 必须在close或terminate之后使用;


**********************https://www.cnblogs.com/TankMa/archive/2011/06/08/2074947.html

推荐阅读更多精彩内容