python进程,主线程, 子线程的关系

      进程是存储数据的空间,而线程是cpu执行的指令。就好比进程是一个房间,线程就是房间中的每一个人。所以每一个进程都必定包含至少一个线程。进程和线程是相对独立的,但又是相互依赖的。当主线程执行完毕后,子线程随即停止。

话不多说,直接上代码!!!

import threading, time
def run(n):
    print('task start', n)
    time.sleep(2)
    print('task end', n, threading.current_thread())

start_time = time.time()
t_obj = [] # 存线程实例
for i in range(50):
    t = threading.Thread(target=run, args=('t-%s' %i, ))
    t.setDaemon(True) # 把当前进程设置为守护进程,主线程执行完毕,子线程均停止
    t.start()
    t_obj.append(t)

# 设置join,主线程等待所有子线程执行完毕才退出
# for t in t_obj:
#     t.join()

time.sleep(2)
print('-'*30 + 'all threads has finished...', threading.current_thread(), threading.active_count())
print('cost time', time.time() - start_time)

    1.使用join函数之后,主线程等待所有子线程执行完毕后退出。

task start t-0
task start t-1
task start t-2
task start t-3
task start t-4
task start t-5
task start t-6
task start t-7
task start t-8
task start t-9
task end t-1 
task end t-0 
task end t-2 
task end t-4 
task end t-3 
task end t-5 
task end t-6 
task end t-9 
task end t-7 
task end t-8 
------------------------------all threads has finished... <_MainThread(MainThread, started 9996)> 1
cost time 4.005229234695435

可以看到,当子线程全部执行完毕以后,主线程才结束。

2.使用setDaemon函数之后,子线程设置为守护线程,一旦主线程执行完毕,子线程随即停止。

task start t-0
task start t-1
task start t-2
task start t-3
task start t-4
task start t-5
task start t-6
task start t-7
task start t-8
task start t-9
------------------------------all threads has finished... <_MainThread(MainThread, started 10500)> 11
cost time 0.006000518798828125

可以看到,当主线程结束时,子线程随之停止。    

tips:主线程运行速度快于子线程。

你可能感兴趣的:(python,多进程,多线程)