threading方法介绍

Python3 线程中常用的两个模块为:

  • _thread
  • threading(推荐使用)

thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。

threading 模块介绍

threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。python当前版本的多线程库没有实现优先级、线程组,线程也不能被停止、暂停、恢复、中断。 threading模块提供的类:   Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local。 threading 模块提供的常用方法: threading.currentThread(): 返回当前的线程变量。 threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。 threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。 threading 模块提供的常量: threading.TIMEOUT_MAX 设置threading全局超时时间。

构造方法: _Thread(group=None, target=None, name=None, args=(), kwargs={}) _

group: 线程组,目前还没有实现,库引用中提示必须是None; target: 要执行的方法; name: 线程名; args/kwargs: 要传入方法的参数。

实例方法:   isAlive(): 返回线程是否在运行。正在运行指启动后、终止前。 get/setName(name): 获取/设置线程名。

start():  线程准备就绪,等待CPU调度 is/setDaemon(bool): 获取/设置是后台线程(默认前台线程(False))。(在start之前设置) 如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,主线程和后台线程均停止 如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止 start(): 启动线程。 join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数)。

import time
import threading

def loop1(in1):
print(‘Start loop 1 at :’, time.ctime())
time.sleep(4)
print(‘End loop 1 at:’, time.ctime())

def loop2(in1, in2):
print(‘Start loop 2 at :’, time.ctime())
time.sleep(2)
print(‘End loop 2 at:’, time.ctime())

def main():
print(“main Starting at:”, time.ctime())

t1 = threading.Thread(target=loop1, args=("thread1",))
# 社会守护线程的方法,必须在start之前设置,否则无效
t1.setDaemon(True)
# t1.daemon = True
t1.start()
t2 = threading.Thread(target=loop2, args=("thread2", "thread3"))
t2.start()
t1.join()  # 等待子线程
t2.join()
print("All done at:", time.ctime())

if __name__ == “__main__”:
main()