守护进程vs 守护线程

# #守护进程
from multiprocessing import Process
import os,time,random

def task():
    print('%s is running' %os.getpid())
    time.sleep(2)
    print('%s is done' %os.getpid())
    # p = Process(target=time.sleep, args=(3,))
    # p.start()

if __name__ == '__main__':
    p=Process(target=task)
    p.daemon = True #1、必须在p.start()之前 2:守护进程不能开启子进程
    p.start()
    # p.join()
    print('')
#
#     '''
#     举例说明守护进程的应用场景:
#         假设有两个任务要干,要玩出并发的效果,使用进程的话可以让主进程
#         执行一个任务,然后开启一个子进程执行一个任务。
#
#         如果这两个任务毫无关系,那么就像上面这么做就可以
#         如果主进程的任务在执行完毕后,子进程的任务没有存在的意义了
#         那么该子进程应该在开启之前就被设置成守护进程
#     '''

 迷人的例子

#主进程代码运行完毕,守护进程就会结束
from multiprocessing import Process
from threading import Thread
import time
def foo():
    print('start 123')
    time.sleep(1)
    print('end 123')

def bar():
    print('start 456')
    time.sleep(1)
    print('end 456')

if __name__ == '__main__':
    p1 = Process(target=foo)
    p2 = Process(target=bar)

    p1.daemon = True
    p1.start()
    p2.start()

    print('main----------')

# main----------
# start 456
# end 456
#打印该行则主进程代码结束,则守护进程p1应该被终止,
# 可能会有p1任务执行的打印信息123,因为主进程打印main----时,p1也执行了,但是随即被终止

 

守护线程

  等到该进程内所有非守护线程都运行完才死掉

from threading import Thread
import time,os
def run():
    print('%s is running '%os.getpid())
    time.sleep(2)
    print('%s is done ' %os.getpid())

if __name__ == '__main__':
    t = Thread(target=run)
    t.daemon = True
    t.start()
    print('')
# 11004 is running
#

迷人的例子:

from threading import Thread
import time
def foo():
    print('start 123')
    time.sleep(1)
    print('end 123')

def bar():
    print('start 456')
    time.sleep(1)
    print('end 456')

if __name__ == '__main__':
    p1 = Thread(target=foo)
    p2 = Thread(target=bar)

    p1.daemon = True
    p1.start()
    p2.start()

    print('main----------')

# start 123
# start 456
# main----------
# end 123
# end 456
原文地址:https://www.cnblogs.com/jassin-du/p/7989175.html