进程:通俗理解一个运行的程序或者软件,进程是操作系统资源分配的基本单位

1.1、导入进程模块
import multiprocessing

1.2、Process进程类的语法结构如下:

Process([group[, target[, name[,args[,kwargs]]]]])

group: --指定进程组,目前只能使用None
target: --执行的目标任务名
name: --进程名字
args: --以元组方式给执行任务传参
kwargs: --以字典方式给执行任务传参

Process创建 的实例对象的常用方法:

start(), 启动子进程实例(创建子进程)
join(timeout), 是否等待子进程执行结束,或等待多少秒
terminate(), 不管任务是否完成,立即终止进程

Process创建的实例对象的常用属性:

name 当前进程的别名,默认为Process-N,N为从1开始递增的整数。
pid 当前进程的pid(进程号)

一、多进程完成多任务代码

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
python进程
"""
import multiprocessing
import time def run_proc():
"""
子进程要执行的代码
:return:
"""
while True:
print("---2---")
time.sleep(1) if __name__ == "__main__":
#创建子进程
sub_process = multiprocessing.Process(target=run_proc)
#启动子进程
sub_process.start()
while True:
print("----1----")
time.sleep(1)

代码执行结果:

二、获取进程pid

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
获取进程pid
""" import multiprocessing
import time
import os def work():
#查看当前进程
current_process = multiprocessing.current_process()
print("work:", current_process)
#获取当前进程的编号
print("work进程编号:", current_process.pid, os.getpid())
#获取父进程的编号
print("work父进程的编号:", os.getppid())
for i in range(10):
print("工作中....")
time.sleep(0.2)
#扩展,根据进程编号杀死对应的进程
os.kill(os.getpid(), 9) if __name__ == "__main__":
#查看当前进程
current_process = multiprocessing.current_process()
print("main:", current_process)
#获取当前里程的编号
print("main进程的编号:", current_process.pid) #创建子进程
sub_process = multiprocessing.Process(target=work)
#启动进程
sub_process.start() #主进程执行打印信息操作
for i in range(5):
print("我在主进程中执行....")
time.sleep(0.2)

代码执行结果:

三、进程的基本状态及状态之间的关系

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
给子进程指定的函数传递参数
""" import multiprocessing #定义一个用于显示信息的方法
def show_info(name, age):
print("name:", name, "; age:", age) if __name__ == "__main__":
sub_process = multiprocessing.Process(target=show_info, args=("yusheng_liang", 20))
#启动进程
sub_process.start()

代码执行结果:

四、进程之间不共享全局变量

注意:创建子进程其实是对主进程进行拷贝,进程之间相互独立,访问的全局变量不是同一个,所以进程之间不共享全局变量

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
进程之间不共享全局变量
"""
import multiprocessing
import time #定义全局变量
my_list = list() #定义写入数据的方法
def write_data():
for i in range(5):
my_list.append(i)
time.sleep(0.2)
print("write_data: ", my_list) #定义读取数据的方法
def read_data():
print("read_data: ", my_list) if __name__ == "__main__":
#创建写入数据的进程
write_process = multiprocessing.Process(target=write_data)
#创建读取数据的进程
read_process = multiprocessing.Process(target=read_data) write_process.start() #主进程等待写入进程执行完成以后代码,再继续往下执行
write_process.join()
read_process.start()

代码执行结果:

五、主进程会等待所有的子进程执行完成程序再退出

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
主进程会等待所有的子进程执行完成程序再退出
"""
import multiprocessing
import time #测试子进程是否执行完成以后主进程才能退出
def work():
for i in range(7):
print("工作中.....")
time.sleep(0.2) if __name__ == "__main__":
#创建子进程
work_process = multiprocessing.Process(target=work)
work_process.start() #让主进程等待1秒钟
time.sleep(1)
print("主进程执行完成了啦!!")

代码执行结果:

六、销毁子进程的代码

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
主进程会等待所有的子进程执行完成程序再退出
"""
import multiprocessing
import time #测试子进程是否执行完成以后主进程才能退出
def work():
for i in range(7):
print("工作中.....")
time.sleep(0.2) if __name__ == "__main__":
#创建子进程
work_process = multiprocessing.Process(target=work)
work_process.start() #让主进程等待1秒钟
time.sleep(1)
print("主进程执行完成了啦!!") #让子进程直接销毁,表示终止执行,主进程退出之前,把所有的子进程直接销毁就可以了
work_process.terminate()

代码执行的结果:

六、进程池

1、当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。
2、初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务。

实例一:进程池同步执行任务
  进程池同步执行任务表示进程池中的进程在执行任务的时候一个执行完成另外一个才能执行,如果没有执行完会等待上一个进程执行。

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
进程池同步实例代码
"""
import multiprocessing
import time #复制任务
def work():
print("复制中...", multiprocessing.current_process().pid)
time.sleep(0.5) if __name__ == "__main__":
#创建进程池
#3:进程池中进程的最大个数
pool = multiprocessing.Pool(3)
#模拟大批量的任务,让进程池去执行
for i in range(5):
#循环让进程池执行对应的work任务
#同步执行任务,一个任务执行完成以后另外一个任务才能执行
pool.apply(work)

实例二:进程池异步执行任务
  进程池异步执行任务表示进程池中的进程同时执行任务,进程之间不会等待

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
进程池异步执行任务
进程池会根据任务执行情况自动创建进程,而且尽量少创建进程,合理利用进程池中的进程完成多任务
"""
import multiprocessing
import time #复制任务
def work():
print("复制中...", multiprocessing.current_process().pid)
# 获取当前进程的守护状态
# 提示:使用进程池创建的进程是守护主进程的状态,默认自己通过Process创建的进程是不是守住主进程的状态
# print(multiprocessing.current_process().daemon)
time.sleep(0.5) if __name__ == "__main__":
#创建进程池
pool = multiprocessing.Pool(3)
#模拟大批量的任务,让进程池去执行
for i in range(5):
# 循环让进程池执行对应的work任务
# 同步执行任务,一个任务执行完成以后另外一个任务才能执行
# pool.apply(work)
# 异步执行,任务执行不会等待,多个任务一起执行
pool.apply_async(work)
# 关闭进程池,意思告诉主进程以后不会有新的任务添加进来
pool.close()
# 主进程等待进程池执行完成以后程序再退出
pool.join()

python--进程初识详解的更多相关文章

  1. Python开发技术详解PDF

    Python开发技术详解(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1F5J9mFfHKgwhkC5KuPd0Pw 提取码:xxy3 复制这段内容后打开百度网盘手 ...

  2. python协程详解

    目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...

  3. 《python开发技术详解》|百度网盘免费下载|Python开发入门篇

    <python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby  内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...

  4. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息.        ...

  5. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  6. Python中dict详解

    from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...

  7. linux进程地址空间详解(转载)

    linux进程地址空间详解(转载) 在前面的<对一个程序在内存中的分析 >中很好的描述了程序在内存中的布局,这里对这个结果做些总结和实验验证.下面以Linux为例(实验结果显示window ...

  8. Python开发技术详解(视频+源码+文档)

    Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...

  9. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

  10. 【python进阶】详解元类及其应用2

    前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...

随机推荐

  1. Python语言基础01-初识Python

    本文收录在Python从入门到精通系列文章系列 1. Python简介 1.1 Python的历史 Python的创始人为吉多·范罗苏姆(荷兰语:Guido van Rossum) 1989年的圣诞节 ...

  2. C语言结构体(摘抄C语言设计)

    struct Student stu_1;//定义struct Student 类型的变量stu_1 struct Student *p;//定义指向struct Student类型数据的指针变量 p ...

  3. 【洛谷P3749】[六省联考2017]寿司餐厅(网络流)

    洛谷 题意: 给出\(n\)份寿司,现可以选取任意多次连续区间内的寿司,对于区间\([l,r]\),那么贡献为\(\sum_{i=l}^r \sum_{j=i}^rd_{i,j}\)(对于相同的\(d ...

  4. jq中

    1.jquery位置信息 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  5. shell脚本特殊符号——单引号、双引号、反引号、反斜杠

    1. 单引号 ( '' ) 被单引号用括住的内容,将被视为单一字串. 2. 双引号 ( " " )  被双引号用括住的内容,将被视为单一字串.双引号只要求忽略大多数,具体说,括在双 ...

  6. python-分割url字符串

    url = ' http://images.jupiterimages.com/common/detail/27/68/22986827.jpg' url.strip().split('/')[-1] ...

  7. CPU-bound(计算密集型) 和I/O bound(I/O密集型)/数据密集型

    https://blog.csdn.net/q_l_s/article/details/51538039 I/O密集型 (CPU-bound)I/O bound 指的是系统的CPU效能相对硬盘/内存的 ...

  8. JDOJ 1065 打倒苏联修正主义

    JDOJ 1065 https://neooj.com/oldoj/problem.php?id=1065 题目描述 [”客观”背景]苏修是苏联修正主义的简称.从1956年到1966年的10年间,过去 ...

  9. Cookie 技术

    Cookie 学习: 问题: HTTP 协议是没有记忆功能的,一次请求结束后,相关数据会被销毁.如果第二次的请求需要使用相同的请求数据怎么办呢?难道是让用户再次请求书写吗? 解决:使用 Cookie ...

  10. [RN] React Native FlatList 选中后 状态没有立即发生改变,而在下一次生效的问题

    React Native FlatList 选中后 状态没有立即发生改变,而在下一次生效的问题 解决关键: 给 FlatList 添加 extraData={this.state} 非常关键,如果不设 ...