一、线程替代方案

1.subprocess

(1)完全跳过线程,使用进程

(2)是派生进程的主要替代方案

(3)python2.4后引入

2.multiprocessing

(1)使用threading接口派生,使用子进程

(2)允许为多核或者多CPU派生进程,接口很threading非常相似

(3)python2.6

3.concurrent.futures

(1)新的异步执行模块

(2)人物级别的操作

(3)python3.2之后引入

4.多进程

(1)进程间通讯(InterprocessCommunication,IPC)

(2)进程之间无任何共享状态

(3)进程的创建

i.直接生成Process实例对象,举例

import multiprocessing

from time import sleep,ctime

def clock(interval):

    while True:

        print("The time is %s" % ctime())

        sleep(interval)

if __name__ == "__main__":

    p = multiprocessing.Process(target= clock,args=(2,))

    p.start()

    #从运行就可以看出来主进程已经结束了,但是子线程仍然在运行着

    #和我们之前讲的线程,有一个最大区别就是线程在主进程里面,主进程结束了,子线程就结束了

    #子线程从属于进程,子进程与进程之间是并列关系

    #这里的程序停止,是我手动停止的

ii.派生子类

举例:重写子类,和我们之前讲的线程的差不多,这里民重写了最重要的两个函数,一个是初始化子类,继承父类的初始化,第二个就是运行函数

class ClockProcess(multiprocessing.Process):

    def __init__(self,interval):

        super().__init__()

        self.interval = interval

    def run(self):

        while True:

            print("The time is {0}".format(ctime()))

            sleep(self.interval)

if __name__ == "__main__":

    p2 = ClockProcess(2)

    p2.start()

iii.在os中查看pid,ppid以及他们的关系

def info(title):

    print(title)

    print("module name:",__name__)

    #得到父进程的id

    print("parent process:",os.getppid())

    #得到本身进程的id

    print("process id:",os.getpid())

def f(name):

    info("function f")

    print("hello",name)

if __name__ == "__main__":

    info("main line")

    print("==================================")

    p = multiprocessing.Process(target=f,args=("bob",))

    p.start()

    p.join()

解释:先调用了一个函数,然后又调用了一个嵌套函数的函数

四、源码

d26_1_multiprocess_exercise.py

https://github.com/ruigege66/Python_learning/blob/master/d26_1_multiprocess_exercise.py

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Python连载37-多进程、进程子类、进程父子id的更多相关文章

  1. Python多进程库multiprocessing创建进程以及进程池Pool类的使用

    问题起因最近要将一个文本分割成好几个topic,每个topic设计一个regressor,各regressor是相互独立的,最后汇总所有topic的regressor得到总得预测结果.没错!类似bag ...

  2. Python 多进程编程之 进程间的通信(在Pool中Queue)

    Python 多进程编程之 进程间的通信(在Pool中Queue) 1,在进程池中进程间的通信,原理与普通进程之间一样,只是引用的方法不同,python对进程池通信有专用的方法 在Manager()中 ...

  3. Python 多进程编程之 进程间的通信(Queue)

    Python 多进程编程之 进程间的通信(Queue) 1,进程间通信Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法----这是操作系统开辟 ...

  4. Python 多线程、多进程 (三)之 线程进程对比、多进程

    Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.多线程与多进 ...

  5. python学习笔记—— 多进程中的 孤儿进程和僵尸进程

    1 基本概述 1.1 孤儿进程和僵尸进程 父进程创建子进程后,较为理想状态是子进程结束,父进程回收子进程并释放子进程占有的资源:而实际上,父子进程是异步过程,两者谁先结束是无顺的,一般可以通过父进程调 ...

  6. Python进阶(4)_进程与线程 (python并发编程之多进程)

    一.python并发编程之多进程 1.1 multiprocessing模块介绍 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大 ...

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

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

  8. python 并发编程 多进程 守护进程

    一 守护进程 主进程创建子进程目的是:主进程有一个任务需要并发执行,那开启子进程帮我并发执行任务 主进程创建子进程,然后将该进程设置成守护自己的进程 关于守护进程需要强调两点: 其一:守护进程会在主进 ...

  9. python 自动化之路 day 09 进程、线程、协程篇

    本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...

  10. python进程、进程池(二)代码部分

    第一种创建进程的方式: from multiprocessing import Process def f(name): print(name,"在子进程") if __name_ ...

随机推荐

  1. 【Java例题】1.1计算n的阶乘

    package study; import java.util.*; import java.math.*; public class myClass { public static void mai ...

  2. Java并发编程实战笔记—— 并发编程4

    1.同步容器类 同步容器类都是线程安全的,但在某些情况下可能需要额外的客户端加锁保护复合操作. 容器上常见的复合操作包括但不限于:迭代(反复访问数据,直到遍历完容器中所有的元素为止).跳转(根据指定顺 ...

  3. ssh的执行流畅

    SSH运行流程 1. 服务器启动,创建Struts2的Filter控制器,创建Spring容器对象. 实例化Struts2控制器时,加载struts.xml,struts-default.xml,de ...

  4. java之异常详解

    一.什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域正常运行的情况,称之为异常. 二.异常体系 Java把异常当作对象来处理,并定义一个基类java. ...

  5. JMeter的JavaRequest探究

    1.背景 最近笔者的一位老朋友咨询了一个问题:在自定义的Java请求中如何编写多个请求?老朋友反应他们发送请求只能基于这种Java请求形式(代码调需用三方封装的jar包).这个问题恰巧不久前在笔者所在 ...

  6. 编译Assimp傻瓜教程

    assimp的编译过程和搭建OpenGL环境时glfw的编译基本相同,建议先阅读环境搭建 下载源码 这里使用的是3.3.1版本,Github下载assimp源码 解压完你会得到 接下来我们要编译这些源 ...

  7. .netcore consul实现服务注册与发现-集群部署

    一.Consul的集群介绍 Consul Agent有两种运行模式:Server和Client.这里的Server和Client只是Consul集群层面的区分,与搭建在Cluster之上的应用服务无关 ...

  8. 一文搞懂Python中的所有数组数据类型

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  9. UVA 10395 素数筛

    Twin Primes Twin primes are pairs of primes of the form (p; p + 2). The term \twin prime" was c ...

  10. 随笔编号-09 批量导入数据(Mysql)报MySQL server has gone away 问题的解决方法

    问题场景: 使用*.sql 脚本,批量导入数据到mysql实例中,使用DOS 界面导入的,期间,到最后一步 source D:\aaa.sql  回车后,系统提示 MySQL server has g ...