一直被这个困扰死了,工作中也没用到threading,要写个线程执行任务,用别人的轮子结果任务内部time.sleep阻塞了(难以置信,宁愿相信是自己用法不对,不想研究了,直接研究threading)。记录一下。
1 setDaemon(True) # 主线程结束即暴力结束,False则会等待t1运行完才会结束。即使t1中含有死循环也会被退出。
2 join() # 阻塞主线程,此时会等待t1任务执行完才会继续往下执行,若此时t1内含有死循环,则后面的代码无机会执行到
上代码!!!可以试着以自己的需求改写跑跑看。
import threading
import time
def main_t():
print('这里是主线程')
t1 = threading.Thread(target=child_1)
print('创建子线程1,活跃线程数:', threading.active_count())
t1.setDaemon(True) # 主线程结束即暴力结束,False则会等待t1运行完才会结束。即使t1中含有死循环也会被退出。
t1.start()
# t1.join() # 阻塞主线程,此时会等待t1任务执行完才会继续往下执行,若此时t1内含有死循环,则后面的代码无机会执行到
print('开启子线程1,活跃线程数:', threading.active_count())
t2 = threading.Thread(target=child_2)
print('创建子线程2,活跃线程数:', threading.active_count())
t2.setDaemon(False) # False默认值,让主线程等待, 直到任务完成,若t2死循环,即永远不会结束,此时会为t1提供执行完的机会。
t2.start()
t2.join()
print('开启子线程2,活跃线程数:', threading.active_count())
def child_1():
# while True:
for i in range(10):
print(f'子线程1执行任务中---{i}')
time.sleep(1)
def child_2():
# while True:
for i in range(5):
print(f'子线程2执行任务中---{i}')
time.sleep(1)
main_t()