Rollo的Python之路多线程实例 Join 与Daemon
Posted rollost
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rollo的Python之路多线程实例 Join 与Daemon相关的知识,希望对你有一定的参考价值。
1.0 threading 的join方法就是用来阻塞用的,可以阻塞主线程,等待所的子线程结束后,然后再运行后面的程序:
import threading import time from time import ctime,sleep def music(func): for i in range(2): print("I was listening to %s.%s" %(func,ctime())) sleep(1) print("end listening %s" % ctime()) def movie(func): for i in range(2): print("I was at the %s %s" %(func,ctime())) sleep(5) print("end watch %s" % ctime()) threads = [] t1 = threading.Thread(target=music,args=("overstock",)) threads.append(t1) t2 = threading.Thread(target=movie,args=("kill them all",)) threads.append(t2) if __name__ =="__main__": for t in threads: t.start() t2.join() print("all over %s" %ctime())
此时,会等t2运行完成后,才执行最后的print语句。
import threading import time from time import ctime,sleep def music(func): for i in range(2): print("I was listening to %s.%s" %(func,ctime())) sleep(1) print("end listening %s" % ctime()) def movie(func): for i in range(2): print("I was at the %s %s" %(func,ctime())) sleep(5) print("end watch %s" % ctime()) threads = [] t1 = threading.Thread(target=music,args=("overstock",)) threads.append(t1) t2 = threading.Thread(target=movie,args=("kill them all",)) threads.append(t2) if __name__ =="__main__": for t in threads: t.start() t1.join() print("all over %s" %ctime())
此时,只会运行完t1后,就会执行最后的print
2.0 threading 的daemon,当我们使用setDaemon(True)方法,设置子线程为守护线程时,主线程一旦执行结束,则全部线程全部被终止执行,可能出现的情况就是,子线程的任务还没有完全执行结束,就被迫停止
import threading import time from time import ctime,sleep def music(func): for i in range(2): print("I was listening to %s.%s" %(func,ctime())) sleep(1) print("end listening %s" % ctime()) def movie(func): for i in range(2): print("I was at the %s %s" %(func,ctime())) sleep(5) print("end watch %s" % ctime()) threads = [] t1 = threading.Thread(target=music,args=("overstock",)) threads.append(t1) t2 = threading.Thread(target=movie,args=("kill them all",)) threads.append(t2) if __name__ =="__main__": for t in threads: t.setDaemon(True) t.start() print("all over %s" %ctime())
跑完主线程,直接关闭程序。
import threading import time from time import ctime,sleep def music(func): for i in range(2): print("I was listening to %s.%s" %(func,ctime())) sleep(1) print("end listening %s" % ctime()) def movie(func): for i in range(2): print("I was at the %s %s" %(func,ctime())) sleep(5) print("end watch %s" % ctime()) threads = [] t1 = threading.Thread(target=music,args=("overstock",)) threads.append(t1) t2 = threading.Thread(target=movie,args=("kill them all",)) threads.append(t2) if __name__ =="__main__": t2.setDaemon(True) for t in threads: t.start() print("all over %s" %ctime())
t2 setDaemon(True),守护线程,t1还是得等,但是只要t1运行完,就会不等t2,直接关闭程序
3.0 threading.current_thread() 线程名
4.0 threading.active_count() 在运行的线程数量。
以上是关于Rollo的Python之路多线程实例 Join 与Daemon的主要内容,如果未能解决你的问题,请参考以下文章
Rollo的Python之路Python 闭包:Colsure
Rollo的Python之路Python 爬虫系统学习 Selenium 模拟登录
Rollo的Python之路Python Split()函数 的用法