使用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模块创造多进程的主要内容,如果未能解决你的问题,请参考以下文章