使用multiprocessing模块创造多进程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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类实现进程间通信

以上是关于使用multiprocessing模块创造多进程的主要内容,如果未能解决你的问题,请参考以下文章

使用multiprocessing模块创建多进程

python 3 编程之多进程 multiprocessing模块

multiprocessing模块创建进程

Python的多进程模块multiprocessing

多进程multiprocessing模块

Python多进程multiprocessing模块介绍