代码创建进程和线程的两种方式

"""
定心丸:Python创建进程和线程的方式基本都是一致的,包括其中的调用方法等,学会一个
另一个自然也就会了。
"""
1.创建进程的两种方式
  • 方式一

    import os
    import time
    from multiprocessing import Process # 实例化一个multiprocessing.Process的对象,并传入一个初始化函数对象
    def task(name):
    print(f'进程 {name} 的PID为{os.getpid()},父进程ID为 {os.getppid()}')
    time.sleep(2)
    print(f'进程 {name} 的PID为{os.getpid()} 运行结束') if __name__ == '__main__':
    # 此处要注意,windows下开启进程一定要在main方法下开启
    process1 = Process(target=task, args=('1',))
    process2 = Process(target=task, args=('2',))
    # 启动进程
    process1.start() # 告诉操作系统帮你创建一个进程
    process2.start()
    print(f'主进程 {os.getpid()}')
  • 方式二

    import os
    import time
    from multiprocessing import Process # 继承类的方式去创建
    class MyProcess(Process):
    def __init__(self, name):
    # 继承Process中的__init__()
    super(MyProcess, self).__init__()
    self.name = name # 此处必要在该类中创建run方法 重写run方法
    def run(self):
    print(f'进程 {self.name} 的PID为{os.getpid()},父进程ID为 {os.getppid()}')
    time.sleep(2)
    print(f'进程 {self.name} 的PID为{os.getpid()} 运行结束') if __name__ == '__main__':
    # 创建两个进程
    process1 = MyProcess('1')
    process2 = MyProcess('2')
    # 开启这两个进程
    process1.start()
    process2.start()
    print(f'主进程 {os.getpid()}')

    运行结果如下:

    """
    主进程 2776
    进程 1 的PID为9364,父进程ID为 2776
    进程 2 的PID为4140,父进程ID为 2776
    进程 1 的PID为9364 运行结束进程 2 的PID为4140 运行结束
    """
2.创建线程的两种方式
  • 方式一

    import time
    from threading import Thread # 实例化一个multiprocessing.Process的对象,并传入一个初始化函数对象
    def task(name):
    print(f"线程 {name} is running")
    time.sleep(2)
    print(f"线程 {name} is over") if __name__ == '__main__':
    # 开启线程不需要在main下面执行代码,直接书写就可以
    # 但是还是习惯性的将启动命令写在main下面 # 创建两个线程
    thead1 = Thread(target=task, args=('1',))
    thead2 = Thread(target=task, args=('2',))
    # 开启两个线程
    thead1.start() # 创建线程的开销非常小,几乎代码一执行线程就创建了
    thead2.start()
    print("主")
  • 方式二

    import time
    from threading import Thread # 继承类的方式去创建
    class MyThead(Thread):
    def __init__(self, name):
    # 继承Process中的__init__()
    super(MyThead, self).__init__()
    self.name = name # 此处必要在该类中创建run方法 重写run方法
    def run(self):
    print(f"线程 {self.name} is running")
    time.sleep(2)
    print(f"线程 {self.name} is over") if __name__ == '__main__':
    # 创建两个线程
    thead1 = MyThead('1')
    thead2 = MyThead('1')
    # 开启这两个线程
    thead1.start()
    thead2.start()
    print('主')
  • 输出结果为如下:

    """
    线程 1 is running

    线程 2 is running
    线程 1 is over线程 2 is over
    """

上方只是简单的创建进程和线程,以上注释只是个人理解,不足的地方还望见谅,欢迎补充

Python创建进程、线程的两种方式的更多相关文章

  1. python 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)

    9.9 线程理论 1.什么是线程 线程指的是一条流水线的工作过程 进程根本就不是一个执行单位,进程其实是一个资源单位,一个进程内自带一个线程,线程才是执行单位 2.进程VS线程 同一进程内的线程们共享 ...

  2. 并发编程 - 线程 - 1.开启线程的两种方式/2.进程与线程的区别/3.Thread对象的其他属性或方法/4.守护线程

    1.开启线程的两种方式: 进程,线程: 进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合)而线程才是cpu上的执行单位) 1.同一个进程内的多个线程共享该进程内的地址资源 2.创建线 ...

  3. Python 35 线程(1)线程理论、开启线程的两种方式

    一:线程理论 1 什么是线程 进程其实一个资源单位,而进程内的线程才是cpu上的执行单位 线程其实指的就是代码的执行过程2 为何要用线程   线程vs进程     1. 同一进程下的多个线程共享该进程 ...

  4. 【java并发】传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  5. 创建线程的两种方式比较Thread VS Runnable

    1.首先来说说创建线程的两种方式 一种方式是继承Thread类,并重写run()方法 public class MyThread extends Thread{ @Override public vo ...

  6. python 并发编程 多线程 开启线程的两种方式

    一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...

  7. Java并发基础01. 传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  8. Java新建线程的两种方式

    Java新建线程有两种方式,一种是通过继承Thread类,一种是实现Runnable接口,下面是新建线程的两种方式. 我们假设有个竞赛,有一个选手A做俯卧撑,一个选手B做仰卧起坐.分别为两个线程: p ...

  9. 1.java多线程_实现线程的两种方式

    1.java多线程基本知识 1.1.进程介绍 不管是我们开发的应用程序,还是我们运行的其他的应用程序,都需要先把程序安装在本地的硬盘上.然后找到这个程序的启动文件, 启动程序的时候,其实是电脑把当前的 ...

随机推荐

  1. AI开发利器:HiLens Studio技术解读

    摘要:传统的AI应用开发和部署意味着高成本和高门槛,借助HiLens Studio,AI应用开发和部署仅需要三步. 曾几何时, 在我们青春年少时, 当我们看到某篇AI的技术文章时, 心中总不免想要在一 ...

  2. Maven如何利用父工程对版本进行统一管理

    项目开发中我们该怎么对项目依赖的版本进行统一管理呢 答:创建一个父级工程,让所有的业务模块都继承该父级工程,即所有的业务都为Module 在父级工程pom文件添加<dependencyManag ...

  3. react实战 : 用矩阵思想做一个自适应布局容器组件

    需求是这样的. 有一个需要显示若干方块型元素的小区域 数量比较少的时候显示一排 数量比较多的时候显示两排 用 grid 不好,因为当数量为奇数的时候需要两排里面的元素都乖乖的居中显示. 用 flex ...

  4. Redis的字符串底层是啥?为了速度和安全做了啥?

    面试场景 面试官:Redis有哪些数据类型? 我:String,List,set,zset,hash 面试官:没了? 我:哦哦哦,还有HyperLogLog,bitMap,GeoHash,BloomF ...

  5. 《Head First 设计模式》:工厂方法模式

    正文 一.定义 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类. PS:在设计模式中,"实现一个接口"泛指实现某个超类型(可 ...

  6. [spring cloud] -- 服务注册与服务发现篇

    eureka 服务发现客户端 DiscoveryClinet职责(核心) 注册服务无试了到Eureka Server中; 发送新塘更新与Eureka Server的租约: 在服务关闭时从Eureka ...

  7. Vue nextTick 学习历程

    nextTick 详解 这是官网的解释,比较简洁精炼,反正我是第一遍什么都没看懂 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 经过我一步步测试 ...

  8. 深入剖析.NETCORE中CORS(跨站资源共享)

    前言 由于现代互联网的飞速发展,我们在开发现代 Web 应用程序中,经常需要考虑多种类型的客户端访问服务的情况:而这种情况放在15年前几乎是不可想象的,在那个时代,我们更多的是考虑怎么把网页快速友好的 ...

  9. websocket推送进度条百分比给前台

    说明:后台springboot项目 前台vue+element-UI 直接放代码: //别忘了开启springboot的websocket <dependency> <groupId ...

  10. vue学习(十九) 生命周期 了解

    生命周期:从vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件统称为生命周期 生命周期钩子:就是生命周期事件的别名而已 生命周期钩子==生命周期函数==生命周期事件 生命周期函数分类 ...