博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python基础——多进程、多线程
阅读量:5795 次
发布时间:2019-06-18

本文共 1913 字,大约阅读时间需要 6 分钟。

hot3.png

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

1、进程的概念

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

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

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

2、示例

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

    PPID 即父进程ID

    201332_Udl6_3821557.png

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

运行结果

212851_tUVn_3821557.png

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

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

1、锁的概念

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

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

1、python的multiprocessing模块也给我们提供了共享内存的操作

2、一般的变量在进程之间是没法进行通讯的,multiprocessing提供了Value和Array模块,他们可以在不通的进程中共同使用。

 

 

 

 

转载于:https://my.oschina.net/u/3821557/blog/1815407

你可能感兴趣的文章
windows下Python 3.x图形图像处理库PIL的安装
查看>>
【IL】IL生成exe的方法
查看>>
network
查看>>
SettingsNotePad++
查看>>
centos7安装cacti-1.0
查看>>
3个概念,入门 Vue 组件开发
查看>>
没有JS的前端:体积更小、速度更快!
查看>>
数据指标/表现度量系统(Performance Measurement System)综述
查看>>
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>
Angular2, NativeScript 和 React Native比较[翻译]
查看>>
论模式在领域驱动设计中的重要性
查看>>
京东AI研究院何晓冬:将先进的技术和模型落地到产业
查看>>
国内首例:飞步无人卡车携手中国邮政、德邦投入日常运营
查看>>
微软将停止对 IE 8、9和10的支持
查看>>
微服务架构会和分布式单体架构高度重合吗
查看>>
如何测试ASP.NET Core Web API
查看>>
《The Age of Surge》作者访谈
查看>>
测试人员的GitHub
查看>>
Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
查看>>
有关GitHub仓库分支的几个问题
查看>>