Python中线程三个部分,thread, threading, queue,其中 thread是低级的线程库,我们不应该使用。而是使用高级的threading.
使用Thread模块,当主线程退出时,所有的子线程都会退出,不管子线程是否在工作。有时候,我们是不期望这种行为,这时候就引入了守护线程。
Threading模块支持守护线程,守护线程表示这个线程不重要的,当进程退出的时候不用等这个线程是否退出。如果你的主线程退出的时候不用等待那些子线程完成,那么设置成守护线程即可。而如果你想等待子线程完成后再退出,那么就用普通的线程即可。
总结:非守护线程的退出,会被主线程退出等候,直到所有的非守护线程都退出了,主线程才会退出;而守护线程,可以不用管是否退出,主线程都可以退出。
join是挂起当前主进程,当当前线程执行完毕后,主进程继续执行。用这种方法,可以保证所有线程都执行完毕,主线程再继续执行。
另外,join也可以不用调用,因为当线程函数执行完毕,线程结束。主线程可以不用调用join,而去做其他的事情。
当以类作为线程的执行对象的时候,是调用的类中的 __call__
函数,这和java是一样的。
也可以集成threading.Thread类,执行其中的run函数。
看来Queue本身就是线程同步的。