天天看點

python等待子線程結束_python 多線程 thread (控制主線程跑完,子線程也關閉) 和 (等待子線程跑完,主線程才關閉)...

import thread

from time import sleep, ctime

loops = [4,2]

def loop0():

print 'start loop 0 at:', ctime()

sleep(4)

print 'loop 0 done at:', ctime()

def loop1():

print 'start loop 1 at:', ctime()

sleep(2)

print 'loop 1 done at:', ctime()

def main():

print 'start:', ctime()

a=thread.start_new_thread(loop0, ())

thread.start_new_thread(loop1, ())

sleep(6)

print 'all end:', ctime()

if __name__ == '__main__':

main()

說明:

start_new_thread()要求一定要有前兩個參數。是以,就算我們想要運作的函數不要參數,我們也 要傳一個空的元組。

當腳本啟動,實際就是啟動了一個主線程,當主線程跑完,子線程也會随之關閉(無亂是否執行完)

主線程和子線程是同時執行的

我們可以把sleep(6)的位置改成去外部txt檔案 查詢值,當值為1 那麼主線程跑完,子線程也随之的關閉掉

後記: 子線程都執行完了,主線程才關閉 的寫法

#coding=utf-8

import thread

from time import sleep,ctime

def loop(nloop,lock):

print 'start loop', nloop, 'at:', ctime()

sleep(1)

print 'loop', nloop, 'done at:', ctime()

#解鎖

lock.release()

def main():

print 'starting at:', ctime()

locks =[]

#建立2個帶鎖的對象

for i in range(2):

# 傳回一個新的鎖定對象,建立一個鎖的清單

lock = thread.allocate_lock()

# 一個原始的鎖有兩種狀态,鎖定與解鎖,分别對應 acquire()和 release() 方法。

#鎖定

lock.acquire()

#追加到 locks[]數組中 ,放到鎖清單 locks中

locks.append(lock)

#執行多線程(建立2條線程并帶上鎖)

for i in range(2):

thread.start_new_thread(loop,(i,locks[i]))

#循環監控,這2條帶鎖的線程,是否解鎖,都解鎖了 主線程就退出,腳本執行完畢

for i in range(2):

while locks[i].locked():

pass

print 'all end:', ctime()

if __name__ == '__main__':

main()