Python基础——多进程、多线程

一、多进程  与  多线程  的概念

1、进程的概念

     进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。

     进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;

     所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。

2、示例

    PID 即进程ID(每个进程有唯一的PID号) 

    PPID 即父进程ID

    

3、进程  与  线程  的区别

    进程:每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。

    线程:线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。

4、多进程  与  多线程  的区别

     多线程使用的是cpu的一个核,适合io密集型

     多进程使用的是cpu的多个核,适合运算密集型

5、Python 的多进程模块 (需要 import 导入该模块即可)

     该模块支持子进程、通信、共享数据、执行不同形式的同步,提供了Process,Pipe, Lock等组件

import multiprocessing

二、多进程的相关操作

1、创建多进程

     格式为  p = multiprocessing.Process(target=worker_1, args=(2, ))

     其中:target 指定的是当进程执行时,需要执行的函数

               args   当进程执行时,需要给函数传入的参数;args 必须是一个tuple,特别是当函数需要传输一个参数时,即 单个元素的元组表示方法   (1,)

               p  代表的是一个多进程。

2、多进程的常用操作

p.is_alive()     判断进程是否存活,返回布尔值

p.run()          启动进程

p.start()        启动进程,会自动调用 run 方法,推荐使用该方法。

p.join(timeout)      等待子进程结束  或到超时时间

p.terminate()         强制子进程退出

p.name        进程的名字

p.pid            进程的PID   

3、示例

import multiprocessing     #导入多进程模块
import time                #导入时间模块

def worker(args,interval):
    print("start worker {0}".format(args))
    time.sleep(interval)   #暂停时间:秒
    print("end worker {0}".format(args))

def main():
    print("start main")
    p1 = multiprocessing.Process(target=worker,args=(1,1))
    p2 = multiprocessing.Process(target=worker,args=(2,2))
    p3 = multiprocessing.Process(target=worker,args=(3,3))
    p1.start()
    p1.join(timeout=3)
    p2.start()
    p3.start()
    print("the number of CPU is {0}".format(multiprocessing.cpu_count()))
    for p in multiprocessing.active_children():
        print("the name of active children is {0},{1} pid is alive".format(p.name,p.pid))
    print("end main")

if __name__ == '__main__':
    main()

运行结果

4、单个元素的元组表示方法   (1,)

三、多进程 的 组件——Lock

猜你喜欢

转载自my.oschina.net/u/3821557/blog/1815407