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

1、多进程  与  多线程  的概念html

一、进程的概念python

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

     进程能够分为系统进程和用户进程。凡是用于完成操做系统的各类功能的进程就是系统进程,它们就是处于运行状态下的操做系统自己;函数

     全部由你启动的进程都是用户进程。进程是操做系统进行资源分配的单位。spa

二、示例操作系统

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

    PPID 即父进程IDorm

    

三、进程  与  线程  的区别htm

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

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

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

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

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

五、Python 的多进程模块 (须要 import 导入该模块便可)

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

import multiprocessing

2、多进程的相关操做

一、建立多进程

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

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

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

               p  表明的是一个多进程。

二、多进程的经常使用操做

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

p.run()          启动进程

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

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

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

p.name        进程的名字

p.pid            进程的PID   

三、示例

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()

运行结果

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

3、多进程 的 组件——Lock 锁

一、锁的概念

     若是有多个线程同时操做一个对象,若是没有很好地保护该对象,会形成程序结果的不可预期。因而 锁 的概念应运而生。

4、多进程 的 共享内存——Value  和  Array

一、python的multiprocessing模块也给咱们提供了共享内存的操做

二、通常的变量在进程之间是无法进行通信的,multiprocessing提供了Value和Array模块,他们能够在不通的进程中共同使用。

相关文章
相关标签/搜索