zoukankan      html  css  js  c++  java
  • 学习python -- 第019天 多进程

    进程概念

    进程(Process)是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位,通俗理解:一个正在运行的程序就是一个进程.例如:正在运行的qq,微信等他们都是一个进程

    多进程作用

    多进程完成多任务


    1.导入进程包
    import multiprocessing
    2.通过进程类创建进程对象
    进程对象=multiprocessing.Proces()
    3.启动进程执行任务
    进程对象.start()

    实例

     1 #
     2 # @author:浊浪
     3 # @version:0.1
     4 # @time: 2021/8/1 11:29
     5 #
     6 
     7 # 导包
     8 import time
     9 import multiprocessing
    10 def sing():
    11     for i in range(3):
    12         print('sing...')
    13         time.sleep(0.5)
    14 
    15 def dance():
    16     for i in range(3):
    17         print('dance...')
    18         time.sleep(0.5)
    19 
    20 if __name__ == '__main__':
    21     # 2.使用进程类创建进程对象
    22     # target:指定进程执行的函数名
    23     sing_process = multiprocessing.Process(target = sing)
    24     dance_process = multiprocessing.Process(target = dance)
    25     # 3.使用进程对象启动进程执行指定任务
    26     sing_process.start()
    27     dance_process.start()
    多进程

    带参数的多进程

    参数名 说明

    args

    以元组的方式给执行任务传参
    kwargs 以字典方式给执行任务传参
     1 if __name__ == '__main__':
     2 # 使用进程类创建进程对象
     3     # target:指定进程执行的函数名#args:使用元组方式给指定任务传参
     4     # 元组的元素顺序就是任务的参教顺序
     5     # kwargs:使用字典方式给指定任务传参
     6     # key名就是参数的名字
     7     def sing(name,num):
     8         pass
     9     def dance(name,num):
    10         pass
    11     sing_process = multiprocessing.Process(target = sing,args =("xiaoming",3))
    12     dance_process = multiprocessing.Process(target = dance,kwargs = {"name":"传智","num":2})

    获取进程编号

    进程编号的作用:
    当程序中进程的数量越来越多时,如果没有办法区分主进程和子进程还有不同的子进程,那么就无法进行有效的进程管理,为了方便管理实际上每个进程都是有自己编号的.

    获取进程编号的两种方式:


    1.获取当前进程编号: os.getpid()

    2.获取当前父进程编号: os.getppid()

    进程注意点

    主进程会等待所有的子进程执行结束再结束

     1 #
     2 # @author:浊浪
     3 # @version:0.1
     4 # @time: 2021/8/1 12:53
     5 #
     6 import multiprocessing
     7 import time
     8 def work():
     9     for i in range(10):
    10         print("工作中..")
    11         time.sleep(0.2)
    12 
    13 if __name__ == '__main__':
    14 
    15     #创建子进程
    16     work_process=multiprocessing.Process(target=work)
    17     work_process.start()
    18     #让主进程等待1秒钟
    19     time.sleep(1)
    20     print("主进程执行完成了啦")
    21     #总结:主进程会等待所有的子进程执行完成以后程宇再退出
    22 
    23 '''
    24 输出:
    25 工作中..
    26 工作中..
    27 工作中..
    28 工作中..
    29 工作中..
    30 主进程执行完成了啦
    31 工作中..
    32 工作中..
    33 工作中..
    34 工作中..
    35 工作中..
    36 '''

    设置守护主程序

    在进程开始之前,即17行之前加上下面语句

    1 #设置守护主进程主进程退出后子进程直接销毁,不再执行子进程中的代码
    2 work_process.daemon = True

    为了保证子进程能够正常的运行,主进程会等所有的子进程执行完成以后再销毁,设置守护主进程的目的是主进程退出子进程销毁,不让主进程再等待子进程去执行。
    设置守护主进程方式:子进程对象.daemon=True

    认清现实,放弃幻想。 细节决定成败,心态放好,认真学习与工作。
  • 相关阅读:
    SpringBoot集成Mybatis
    springboot通过slf4j配置日志
    SpringBoot导入jsp依赖始终报错
    shiro小记
    阿里开发手册华山版——(编程规约篇)记录目前自己不合理的地方
    [网络流24题] 2. 太空飞行计划问题 解题报告
    LOJ 6089 小 Y 的背包计数问题 解题报告 (动态规划)
    UVA 10599 Blocks 解题报告 (动态规划)
    Comet OJ#12E Ternary String Counting 解题报告
    [WC2016]挑战NPC 解题报告
  • 原文地址:https://www.cnblogs.com/jyf2018/p/15086588.html
Copyright © 2011-2022 走看看