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

 

另外一种 https://www.cnblogs.com/kaibindirver/p/11432880.html

补充 https://www.cnblogs.com/kaibindirver/p/12717924.html

posted @ 2020-04-14 16:03  凯宾斯基  阅读(1863)  评论(0编辑  收藏  举报