Python 线程 threading 本文共有2994个字,关键词: threading模块支持守护线程,守护线程一般是一个等待客户请求的服务器,如果没有客户提出请求,就一直等着。如果设定一个线程为守护线程,就表示这个线程不重要,在进程退出时,不用等待这个线程退出。如果主线程退出时不用等待子线程完成,就要设定这些线程的daemon属性,即在线程Thread.start()开始前,调用setDaemon()函数设定线程的daemon标志(Thread.setDaemon(True)),表示这个线程“不重要”。如果一定要等待子线程执行完成再退出主线程,就什么都不用做或显式调用Thread.setDaemon(False)以保证daemon标志为False,可以调用Thread.isDaemon()函数判断daemon标志的值。新的子线程会继承父线程的daemon标志,主线程在所有非守护线程退出后才会结束,即进程中没有非守护线程存在时才结束。 join()还可以设置timeout参数,即主线程的超时时间。join()另一个比较重要的方面是可以完全不用调用。一旦线程启动,就会一直运行,直到线程的函数结束并退出为止。如果主线程除了等线程结束外,还有其他事情要做,就不用调用join(),只有在等待线程结束时才调用。import threading from time import sleep from datetime import datetime def get_date_str(dt): return datetime.strftime(dt, '%Y-%m-%d %H-%M-%S') def subthread(thid, sec): print(f'subthread-线程{thid},Start at {get_date_str(datetime.now())} ,sleep{sec} s') sleep(sec) print(f'subthread-线程{thid},End at {get_date_str(datetime.now())} ,sleep{sec} s') def subthread2(thid, sec): print(f'subthread2-线程{thid},Start at {get_date_str(datetime.now())} ,sleep{sec} s') sleep(sec) print(f'subthread2-线程{thid},End at {get_date_str(datetime.now())} ,sleep{sec} s') def main(): print('-' * 10 + 'ALL START:' + get_date_str(datetime.now()) + '-' * 10) threads = [] loops = [4, 2,2] thread_count=range(len(loops)) for i in thread_count: if i < 2: threads.append(threading.Thread(target=subthread,args=(i,loops[i]))) else: threads.append(threading.Thread(target=subthread2, args=(i, loops[i]))) for i in thread_count: threads[i].start() for i in thread_count: threads[i].join() # 线程全部结束之后主线程才会退出 print('-' * 10 + 'ALL End:' + get_date_str(datetime.now()) + '-' * 10) if __name__=='__main__': main() 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 梦白沙 (๑>ڡ<)☆谢谢老板~ 1元 2元 5元 10元 50元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 Python 2022-04-23 评论 321 次浏览