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()