(一)使用multiprocessing模块创造多进程

一、Intro:

1、爬虫开发中,实现多进程是十分重要的(多个任务同时进行)。

2、时间片轮转调度算法:所有进程轮流使用CPU,每个进程占用CPU的时间很短(100ms)。用户看来仿佛所有的进程在不间断运行。

3、进程->CPU分配资源的最小单位。

  线程->程序执行的最小单位。

  一个进程由多个线程组成。

4、父进程与子进程:子进程在处理过程中,只对父进程地址空间中的相关数据进行访问,可以保护父进程地址空间中与当前子进程执行任务无关的全部数据。

二、使用"multiprocessing"模块的''Process"类创造多线程

 

编译环境:python 2.7.1

IDE:pycharm

保存为

import os
from multiprocessing import Process

def run_proc(name):
    print 'Child process %s (%s) Running...' % (name,os.getpid())

if __name__ == '__main__':
    print 'parent process %s.' % os.getpid()
    for i in range(5):
        p = Process(target=run_proc,args=(str(i),))
        print 'Process will start.'
        p.start()
    p.join()
    print 'Process End'

运行结果

parent process 1072.
Process will start.
Process will start.
Process will start.
Process will start.
Process will start.
Child process 0 (6676) Running...
Child process 1 (6752) Running...
Child process 2 (6864) Running...
Child process 4 (6768) Running...
Child process 3 (6580) Running...
Process End

Process finished with exit code 0

(1)定义run_proc函数,传递name参数并用os.getpid获得当前进程的进程号

if __name__ == '__main__':   如果在其他代码中调用本代码的函数,该if条件之后的代码将不会被执行,因为__name__ != '__main__'

例如,在另一个文件tmp.py中调用run_proc函数:

import p17
p17.run_proc(1)
Child process 1 (7120) Running...

Process finished with exit code 0

当然也可以采用from...import...

from p17 import run_proc
run_proc(1)

(2)for i in range(5):  段
即在当前的父进程下,创建5个子进程。python官方手册对Process类给予了更加易懂的版本:
from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()
Process类需要传递两个参数,target即在f所调用进程下 再创造一个子进程。args后接字符,用于子进程命名。start()方法和join()方法分别实现子进程的启动和激活进程间通讯。

 

下期预告:

(1)使用multiprocessing模块的pool类产生大量子进程

(2)使用Queue类和Pipe类实现进程间通信

posted @ 2017-10-18 14:04  一条鲈鱼  阅读(168)  评论(0编辑  收藏  举报