一、线程替代方案

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. bat 搜索进程名并kill

    @echo off set/p "target=进程名(默认nginx): "if not defined target (set "target=nginx" ...

  2. MATLAB使用过程中遇到的问题(持续更新)

    note:如果对你有帮助,请点赞评论哟!!! 问题1:每次双击.m文件都会自动打开一个matlab程序 step1:下载这个文件 http://pan.baidu.com/s/1pL2ULOf ste ...

  3. Tomcat源码分析 (二)----- Tomcat整体架构及组件

    前言 Tomcat的前身为Catalina,而Catalina又是一个轻量级的Servlet容器.在美国,catalina是一个很美的小岛.所以Tomcat作者的寓意可能是想把Tomcat设计成一个优 ...

  4. Go中的并发编程和goroutine

    并发编程对于任何语言来说都不是一件简单的事情.Go在设计之初主打高并发,为使用者提供了goroutine,使用的方式虽然简单,但是用好却不是那么容易,我们一起来学习Go中的并发编程. 1. 并行和并发 ...

  5. 洛谷 P3413 SAC#1 - 萌数

    题意简述 求l~r之间存在长度至少为2的回文子串的正整数的个数 题解思路 数位DP 注意到有偶数长度的回文串必有长度为2的回文串,有奇数长度的回文串必有长度为3的回文串 所以只需判断与前一位,前两位是 ...

  6. centos7通过yum安装docker

    ##yum源安装#1.更新yumyum update #2.删除旧版本yum remove docker \docker-client \docker-client-latest \docker-co ...

  7. 深入剖析PHP7内核源码(一)- PHP架构与生命周期

    PHP7 为什么这么快? 全新的zval 更节约的空间,栈上分配内存 zend_string 存储字符串的Hash值,数组查询的时候不需要进行Hash计算 在HashTable桶内直接存数据,减少了内 ...

  8. 性能测试学习第一天-----概念、环境、LR录制&参数化

    1.性能测试的概念: 通过一定的手段,在多并发情况下,获取被测系统的各项性能指标, 验证被测系统在高并发下的处理能力.响应能力.稳定性等,能否满足预期.定位性能瓶颈,排查性能隐患,保障系统的质量,提升 ...

  9. BUPTOJj83

    83. A + B Problem 时间限制 1000 ms 内存限制 65536 KB 题目描述 Calculate the sum of two given integers A and B. 输 ...

  10. JavaScript数组方法大全(第一篇)

    数组方法大全(第一篇) 注意:第一次写博客有点小紧张,如有错误欢迎指出,如有雷同纯属巧合,本次总结参考书籍JavaScript权威指南,有兴趣的小伙伴可以去翻阅一下哦 join()方法 该方法是将数组 ...