计算机科学中的线程是可以由调度程序独立管理的一组指令,调度程序是操作系统的一部分。
线程的主要功能是一次运行多个线程。线程意味着不同的任务,程序中的函数调用以及多个线程同时运行,这并不意味着它们在不同的计算机上执行。
在两种情况下使用多线程。
当子程序的输出需要与主程序组合时。
当主程序包含彼此相对独立的代码时。
Python提供了非常强大的线程模块,还提供了对线程的高级支持。
线程模块定义了许多函数,这些函数用于获取与线程相关的数据,并且这些函数会自动执行。
threading.active_count()
此函数返回当前活动的Thread对象的数量。在此,返回的计数等于由返回的列表的长度enumerate()
。
threading.current_thread()
此函数返回当前的Thread对象,它对应于调用者的控制线程。
threading.get_ident()
该函数返回当前线程的“线程标识符”。这是一个非零整数。
threading.enumerate()
此函数返回当前活动的所有Thread对象(包括守护线程)的列表,current_thread()函数创建虚拟线程和主线程,并排除终止的线程和尚未启动的线程。
threading.main_thread()
该函数返回主线程对象。
threading.settrace(func)
从线程模块启动所有线程后,请设置跟踪功能。在run()
调用方法之前,此函数将为每个线程传递给sys.settrace()。
threading.setprofile(func)
从线程模块启动所有线程后,请设置配置文件功能。在run()
调用方法之前,此函数将为每个线程传递给sys.setprofile()。
threading.stack_size([size])
该函数返回线程堆栈的大小,并在创建新线程时使用。
线程。TIMEOUT_MAX
这是一个常量,具有阻塞函数的超时参数(Lock.acquire(),RLock.acquire(),Condition.wait()等)的最大值。
import threading def trace_function(): print("Passing the trace function") def profile(): print("PROFILE THREAD: " + str(threading.current_thread().getName())) class mythread(threading.Thread): def __init__(self, thread_name, thread_ID): threading.Thread.__init__(self) self.thread_name = thread_name self.thread_ID = thread_ID def run(self): print(str(self.thread_ID)); print("ACTIVE THREADS ARE: "+ str(threading.active_count())) print("CURRENT THREAD IS: " + str(threading.current_thread().getName())) my_thread1 = mythread("PP", 500) my_thread2 = mythread("PythonProgram", 1000); print("NAME OF THE MAIN THREAD: " + str(threading.main_thread().getName())) print("IDENTIFICATION OF MAIN THREAD: "+ str(threading.get_ident())) print("STACK SIZE = " + str(threading.stack_size())) print(threading.settrace(trace_function())) threading.setprofile(profile()) my_thread1.start() my_thread2.start() print("LIST OF ENUMERATION: ") print(threading.enumerate()) print("EXIT")
输出结果
NAME OF THE MAIN THREAD: MainThread IDENTIFICATION OF MAIN THREAD: 5436 STACK SIZE = 0 Passing the trace function None PROFILE THREAD: MainThread 500 1000LIST OF ENUMERATION: ACTIVE THREADS ARE: 6 [<_MainThread(MainThread, started 5436)>, <Thread(Thread-4, started daemon 1960)>, <Heartbeat(Thread-5, started daemon 6452)>, <HistorySavingThread(IPythonHistorySavingThread, started 4304)>, <mythread(Thread-8, started 8460)>, <mythread(Thread-9, started 4668)>] EXIT CURRENT THREAD IS: Thread-8 ACTIVE THREADS ARE: 5 CURRENT THREAD IS: Thread-9