from multiprocessing import Process
import os def func1():
print('子进程1',os.getpid()) #子进程:获取当前进程的进程号
print('子进程的父进程:', os.getppid()) #获取进程的父进程id
def func2():
print('子进程2',os.getpid())
print('子进程的父进程:', os.getppid())
def func3():
print('子进程3',os.getpid())
print('子进程的父进程:', os.getppid()) if __name__ == '__main__':
p1 = Process(target=func1) #注册:将函数名(内存地址)注册进子进程
p2 = Process(target=func2) #p1是一个进程对象
p3 = Process(target=func3)
p1.start() #开启了一个子进程
p2.start() #三个并行的子进程
p3.start()
print('父进程:',os.getpid()) #父进程:获取当前进程的进程号
print('父进程的父进程:', os.getppid()) #获取进程的父进程id

  子进程的执行顺序会变化,说明三个子进程是并行的。

  传递参数:

from multiprocessing import Process
import os def func1(args): #args接收参数
print('子进程1',os.getpid()) #子进程:获取当前进程的进程号
print('子进程的父进程:', os.getppid()) #获取进程的父进程id
print(args) #打印传递进来的参数 if __name__ == '__main__':
p1 = Process(target=func1,args=('参数',)) #以元组的形式传递参数,如果只传递一个参数必须要加一个逗号
p1.start()
print('父进程:',os.getpid()) #父进程:获取当前进程的进程号
print('父进程的父进程:', os.getppid()) #获取进程的父进程id

结果:

  开启多个子进程方法:

from multiprocessing import Process

def func1(args):
print('*'*args) if __name__ == '__main__':
# 可以使用for循环实现开启多个子进程
for i in range(1,5):
p1 = Process(target=func1,args=(i,))
p1.start()

结果1:  结果2:

  多进程join()方法:

from multiprocessing import Process

def func1(args):
print('子进程1')
print(args) if __name__ == '__main__':
p1 = Process(target=func1,args=('参数',))
p1.start()
print('hahahahha')
# 感知一个子进程的结束,将异步变为同步:join之前为异步
p1.join()
# join之后为同步
print('qqqqqqqqq')

结果:

实践:我们想实现先异步输出10句话,最后同步输出执行完毕的结果。

from multiprocessing import Process

def func1(args):
print('*'*args) if __name__ == '__main__':
for i in range(10):
p1 = Process(target=func1,args=(i,))
p1.start()
p1.join()
print('执行完毕!')

但是我们发现,“执行完毕”四个字总是跟随在最长的一句话后面打印输出,然而因为上面10句话是异步的,最长的那句话并不是每次都最后输出,所以我们这样不能现实我们的需求。

from multiprocessing import Process

def func1(args):
print('*'*args) if __name__ == '__main__':
p_list = [] #创建一个空列表用来存放等会生产的进程对象
for i in range(10):
p1 = Process(target=func1,args=(i,))
p_list.append(p1)#将每个进程对象依次存放进列表中
p1.start()
[i.join() for i in p_list] # 运用列表推导式:循环列表,依次对列表中的进程对象执行join()方法。之前所有进程必须在这里执行完才能执行下面的代码。
print('执行完毕!')

结果1:  结果2:

python_并发编程——多进程的更多相关文章

  1. python_并发编程——多进程的第二种启动方式

    1.多进程的第二种启动方式 import os from multiprocessing import Process # 创建一个自定义类,继承Process类 class MyProcess(Pr ...

  2. python并发编程&多进程(二)

    前导理论知识见:python并发编程&多进程(一) 一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_cou ...

  3. python并发编程&多进程(一)

    本篇理论居多,实际操作见:  python并发编程&多进程(二) 一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行) ...

  4. Python 3 并发编程多进程之进程同步(锁)

    Python 3 并发编程多进程之进程同步(锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理. 1. ...

  5. Python 3 并发编程多进程之守护进程

    Python 3 并发编程多进程之守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemo ...

  6. Python 3 并发编程多进程之队列(推荐使用)

    Python 3 并发编程多进程之队列(推荐使用) 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 可以往 ...

  7. Python并发编程-多进程

    Python并发编程-多进程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多进程相关概念 由于Python的GIL全局解释器锁存在,多线程未必是CPU密集型程序的好的选择. ...

  8. python 并发编程 多进程 目录

    python multiprocessing模块 介绍 python 开启进程两种方法 python 并发编程 查看进程的id pid与父进程id ppid python 并发编程 多进程 Proce ...

  9. python 并发编程 多进程 队列目录

    python 并发编程 多进程 队列 python 并发编程 多进程 生产者消费者模型介绍 python 并发编程 多进程 生产者消费者模型总结 python 并发编程 多进程 JoinableQue ...

随机推荐

  1. Alpha版本2发布

    0.日常开头 这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <https://www.cnblogs.com/harry240/p/11524162.html> 团 ...

  2. Kubernetes集群安装(自己搭过,已搭好)

    k8s安装目录 1. 组件版本 && 集群环境 组件版本 etcd 集群 && k8s master 机器 && k8s node 机器 集群环境变量 ...

  3. ubuntu18.04安装Anaconda

    jiangshan@dell-Precision-7920-Tower:~$ lsAnaconda3-2019.07-Linux-x86_64.shjiangshan@dell-Precision-7 ...

  4. SpringBoot配置文件敏感信息加密-jasypt

    使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...

  5. Linux系统下Dubbo安装的详细教程

    Linux系统下Dubbo安装的详细教程 1.Dubbo的简介 Dubbo是 [1]  阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [ ...

  6. 常用Tables控件介绍(一)

    1.DataTables Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 分页,即时搜索和排序 几乎支持任何数据源:DOM, jav ...

  7. SpringCloud之Ribbon负载均衡及Feign消费者调用服务

    目的: 微服务调用Ribbon Ribbon负载均衡 Feign简介及应用 微服务调用Ribbon Ribbon简介 1. 负载均衡框架,支持可插拔式的负载均衡规则 2. 支持多种协议,如HTTP.U ...

  8. 3D星形贴图

    3D星形贴图: /** * * *---------------------* * | *** 3D星形贴图 *** | * *---------------------* * * 编辑修改收录:fe ...

  9. jquery easyui datagrid 在翻页以后仍能记录被选中的行及刷新设置选中行数据

    //easyUI的datagrid在复选框多选时,如何在翻页以后仍能记录被选中的行://注意datagrid中需要配置idField属性,一般为数据的主键 $.ajax({ type: 'GET', ...

  10. sql 分组后重复数据取时间最新的一条记录

    1.取时间最新的记录 不分组有重复(多条CreateTime一样的都是最新记录) select * from test t where pid in ( select PId from Test t ...