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()
说明:
当脚本启动,实际就是启动了一个主线程,当主线程跑完,子线程也会随之关闭(无乱是否执行完)
主线程和子线程是同时执行的
我们可以把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()