Daemon(守护与否)和join(阻塞与否)

#-*- encoding:utf-8 -*-

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

import  multiprocessing

import time

def worker(interval):

print("work start:{0}".format(time.ctime()));

    time.sleep(interval)

print("work end:{0}".format(time.ctime()));

if__name__ =="__main__":

p = multiprocessing.Process(target = worker, args = (3,))

#守护,无join

#------------------主线程运行正常结束,子线程强制结束--------------------------------#

#非守护,无join

#------------------主线程正常结束-----------子线程运行正常结束(结束顺序不一定)--------------------------------#

#守护,join(阻塞)

#------------------子线程运行正常结束-----------主线程正常结束--------------------------------#

#非守护,join(阻塞)

#------------------子线程运行正常结束-----------主线程正常结束--------------------------------#

p.daemon =True#注意一个线程默认不是守护线程,也就是说默认值是False

#结论:

#☆☆☆对于含有join的代码而言,一定有主线程在子线程之后才执行完。

#☆☆☆对于没有join的代码而言:如果守护,只要主线程关闭,子线程及时没执行完也必须关闭,;

#   如果非守护,主线程与子线程结束顺序不一定

    p.start()

# p.join()#(挡住,无法执行join以后的语句)

print("end!")

你可能感兴趣的:(Daemon(守护与否)和join(阻塞与否))