多线程 threading模块
Python中的多线程操作有两种方式: 函数式(thread)和继承(threading.Threading)式
python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的。thread是比较底层的模 块,threading是对thread做了一些包装的,可以更加方便的被使用。
函数式
守护进程
如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的 daemon 属性。即,在线程开始 thread.start()之前,调用setDeamon()函数,设定线程的daemon标志。thread.setDaemon(True)就表示这个线程“不重要”。
如果你想等待子线程完成再退出,那就什么都不用做。,或者显示地调用thread.setDaemon(False),设置daemon的值为false。新的子线程会继承父线程的daemon标志。整个Python会在所有的非守护线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。
根据原装官方文档的解释,主线程在所有非守护线程都死亡后才会被kill,这样当你忘记使用threading.Thread.exit_thread()或者thread_stop()的时候,嘿嘿,你的程序中主线程收到结束信号,但是因为有一个非守护进程的存在,所以等待。
Queue模块
Queue模块实现了多生产者、多消费者队列。它特别适用于信息必须在多个线程间安全地交换的多线程程序中。这个模块中的Queue类实现了所有必须的锁语义。它依赖于Python中线程支持的可用性;参见threading模块。
特性参数
模块实现了三类队列:FIFO(First In First Out,先进先出,默认为该队列)、LIFO(Last In First Out,后进先出)、基于优先级的队列。以下为其常用方法: