zoukankan      html  css  js  c++  java
  • 守护进程

    守护进程

    主进程创建守护进程 
      其一:守护进程会在主进程代码执行结束后就终止 
      其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children

    注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止

    # 守护进程
    import threading
    import time
    def run(n):
        print('task',n)
        time.sleep(2)
        print('task done',n)#从结果中可以看出这步没执行,所以主进程执行完毕,那么守护子进程i也就被干掉了
    start_time=time.time()
    for i in range(50):
        t= threading.Thread(target=run,args=('t-%s'%i,))
        t.setDaemon(True)#把当前线程设置为守护进程,一定在start之前设置,start之后就不可以设置了。
        t.start()
    
    print('主线程不是守护进程,主线程是程序本身,'
          '程序会等主线程执行完毕,但是不会等守护进程执行完毕')#主线程
    
    print('非守护进程执行结束后,程序立刻同时结束,不会等守护线程,'
          '看一下时间就知道:',time.time()-start_time)
    

      结果:

     1 守护进程
     2 主进程创建守护进程 
     3   其一:守护进程会在主进程代码执行结束后就终止 
     4   其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children
     5 
     6 注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止
     7 
     8 # 守护进程
     9 import threading
    10 import time
    11 def run(n):
    12     print('task',n)
    13     time.sleep(2)
    14     print('task done',n)
    15 start_time=time.time()
    16 for i in range(50):
    17     t= threading.Thread(target=run,args=('t-%s'%i,))
    18     t.setDaemon(True)#把当前线程设置为守护进程,一定在start之前设置,start之后就不可以设置了。
    19     t.start()
    20 
    21 print('主线程不是守护进程,主线程是程序本身,'
    22       '程序会等主线程执行完毕,但是不会等守护进程执行完毕')#主线程
    23 
    24 print('非守护进程执行结束后,程序立刻同时结束,不会等守护线程,'
    25       '看一下时间就知道:',time.time()-start_time)
    26   结果:
    27 
    28  1 task t-0
    29  2 task t-1
    30  3 task t-2
    31  4 task t-3
    32  5 task t-4
    33  6 task t-5
    34  7 task t-6
    35  8 task t-7
    36  9 task t-8
    37 10 task t-9
    38 11 task t-10
    39 12 task t-11
    40 13 task t-12
    41 14 task t-13
    42 15 task t-14
    43 16 task t-15
    44 17 task t-16
    45 18 task t-17
    46 19 task t-18
    47 20 task t-19
    48 21 task t-20
    49 22 task t-21
    50 23 task t-22
    51 24 task t-23
    52 25 task t-24
    53 26 task t-25
    54 27 task t-26
    55 28 task t-27
    56 29 task t-28
    57 30 task t-29
    58 31 task t-30
    59 32 task t-31
    60 33 task t-32
    61 34 task t-33
    62 35 task t-34
    63 36 task t-35
    64 37 task t-36
    65 38 task t-37
    66 39 task t-38
    67 40 task t-39
    68 41 task t-40
    69 42 task t-41
    70 43 task t-42
    71 44 task t-43
    72 45 task t-44
    73 46 task t-45
    74 47 task t-46
    75 48 task t-47
    76 49 task t-48
    77 50 task t-49
    78 51 主线程不是守护进程,主线程是程序本身,程序会等主线程执行完毕,但是不会等守护进程执行完毕
    79 52 非守护进程执行结束后,程序立刻同时结束,不会等守护线程,看一下时间就知道: 0.013000726699829102
    View Code

    原因是:主进程程序启动执行到t-i子进程,由于子进程需要开辟内存空间,由于需要耗费时间,所以主进程会首先输出“主”,由于主进程执行完毕,那么守护子进程i也就被干掉了,随之主进程也就退出了 

    # 守护进程
    import threading
    import time
    def run(n):
        print('task',n)
        time.sleep(2)
        print('task done',n)
    start_time=time.time()
    for i in range(50):
        t= threading.Thread(target=run,args=('t-%s'%i,))
        t.setDaemon(True)
        t.start()
    
    time.sleep(2)
    print('如果主线程时间消耗长一点,子线程会有执行的结果显示,有可能子线程执行完,也有可能没执行完如下:'
          '看一下时间就知道:',time.time()-start_time)
    

      结果:

      1 task t-0
      2 task t-1
      3 task t-2
      4 task t-3
      5 task t-4
      6 task t-5
      7 task t-6
      8 task t-7
      9 task t-8
     10 task t-9
     11 task t-10
     12 task t-11
     13 task t-12
     14 task t-13
     15 task t-14
     16 task t-15
     17 task t-16
     18 task t-17
     19 task t-18
     20 task t-19
     21 task t-20
     22 task t-21
     23 task t-22
     24 task t-23
     25 task t-24
     26 task t-25
     27 task t-26
     28 task t-27
     29 task t-28
     30 task t-29
     31 task t-30
     32 task t-31
     33 task t-32
     34 task t-33
     35 task t-34
     36 task t-35
     37 task t-36
     38 task t-37
     39 task t-38
     40 task t-39
     41 task t-40
     42 task t-41
     43 task t-42
     44 task t-43
     45 task t-44
     46 task t-45
     47 task t-46
     48 task t-47
     49 task t-48
     50 task t-49
     51 task done t-0
     52 task done t-1
     53 task done t-4
     54 task done t-2
     55 task done t-6
     56 task done t-7
     57 task done t-5
     58 task done t-3
     59 task done t-10
     60 task done t-9
     61 task done t-8
     62 task done t-14
     63 task done t-11
     64 task done t-12
     65 task done t-13
     66 task done t-16
     67 task done t-15
     68 task done t-17
     69 task done t-18
     70 task done t-22
     71 task done t-20
     72 task done t-23
     73 task done t-19
     74 task done t-21
     75 task done t-29
     76 task done t-28
     77 task done t-31
     78 task done t-27
     79 task done t-25
     80 task done t-30
     81 task done t-24
     82 task done t-32
     83 task done t-36
     84 task done t-26
     85 task done t-33
     86 task done t-34
     87 task done t-35
     88 task done t-39
     89 task done t-41
     90 task done t-38
     91 task done t-40
     92 task done t-37
     93 task done t-46
     94 task done t-45
     95 task done t-43
     96 task done t-44
     97 task done t-42
     98 task done t-49
     99 task done t-48
    100 task done t-47
    101 如果主线程时间消耗长一点,子线程会有执行的结果显示,有可能子线程执行完,也有可能没执行完如下:看一下时间就知道: 2.010115146636963task
    View Code

     主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon(),这个的意思是,把主线程A设置为守护线程,这时候,要是主线程A执行结束了,就不管子线程B是否完成,一并和主线程A退出.这就是setDaemon方法的含义,这基本和join是相反的。此外,还有个要特别注意的:必须在start() 方法调用之前设置,如果不设置为守护线程,程序会被无限挂起。

      

  • 相关阅读:
    Dump 文件生成与分析
    打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释
    GridView编辑删除操作
    google域名邮箱申请 gmail域名邮箱申请(企业应用套件)指南
    nvl,空时的推断和取值
    如何将图片保存至自定义分组
    Java实现 蓝桥杯VIP 算法训练 集合运算
    Java实现 蓝桥杯VIP 算法训练 瓷砖铺放
    Java实现 蓝桥杯VIP 算法训练 瓷砖铺放
    Java实现 蓝桥杯VIP 算法训练 集合运算
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/9308030.html
Copyright © 2011-2022 走看看