2017-5-22 python 爬虫之--多进程(自己测试用,慎取)

一、多进程

多任务:生活中来看,就是多个任务同时进行,喝酒聊天,开车,手脚并用,唱歌跳舞

电脑中:录屏、sublime、vnc服务端、浏览器打开等

代码中:实现多任务,多进程、多线程

进程:电脑中,每一个软件启动起来都是一个进程,

代码中:没有运行的时候称之为程序,运行起来之后就是一个进程

多进程:进程只有一个,称之为主进程,子进程,要实现两个函数同时执行,就要通过主进程来创建子进程

操作系统实现,只是在进程之间来回切换,切换的非常快,看着像同时执行一样

代码实现?


面向过程实现的时候:(process)

p = Process(target=xxx, name=xxx, args=(xxx,))

target: 进程启动之后要执行的函数

name: 给进程起个名字

args: 给子进程传递的参数,是一个元组

p.start()  启动进程

p.join()  让主进程等待子进程结束

os.getpid() 获取当前进程id号

os.getppid() 获取父进程的id号

面向对象:

见代码

*****************************************************************************

from multiprocessing import Process

import time

class SingProcess(Process):

def __init__(self, a):

# 如果要重写构造方法,一定得手动调用父类的构造方法

super().__init__()

self.a = a

def run(self):

print('传递的参数为%s' % self.a)

for x in range(1, 5):

print('我在唱小情歌')

time.sleep(1)

class DanceProcess(Process):

def run(self):

for x in range(1, 5):

print('我在跳钢管舞')

time.sleep(1)

def main():

a = '现在很多老歌手为什么不唱歌了'

p_sing = SingProcess(a)

# 启动进程,进程启动之后默认执行类里面的run方法

p_sing.start()

# p_dance = DanceProcess()

# p_dance.start()

p_sing.join()

# p_dance.join()

print('主进程结束')

if __name__ == '__main__':

main()

*****************************************************************************************

全局变量

进程之间是否共享全局变量,不共享

每一个进程都是单独的代码

进程池

多进程拷贝,拷贝文件夹,假如文件夹里面只有文件。假如有100个文件,那么拷贝的时候先拷贝第一个,然后第二个,然后第三个====

拷贝一个文件就是一个任务,那一共100文件,那难道要开辟100个进程吗?

进程并不是越多越好,切换占用的时间越大

练习:多进程拷贝

拷贝之前记录时间戳,拷贝之后记录时间戳,计算拷贝的时间

多进程拷贝也是一样,哪个时间短

引入进程池,规定能创建几个进程,来了任务,5个进程


你可能感兴趣的:(2017-5-22 python 爬虫之--多进程(自己测试用,慎取))