Python中的基于线程的并行性
在计算机科学中,线程是一组可以由调度程序(操作系统的一部分)独立管理的指令。
线程的主要功能是同时运行多个线程。线程指的是程序中的不同任务、函数调用,多个线程同时运行并不意味着它们在不同的机器上执行。
多线程用于两种情况。
当子程序的输出需要与主程序组合时。
当主程序包含彼此相对独立的代码段时。
线程模块
Python 提供了 threading 模块,它非常强大,并为线程提供了高级支持。
threading 模块定义了许多用于获取线程相关数据的函数,这些函数会自动执行。
threading.active_count()
此函数返回当前存活的 Thread 对象的数量。这里返回的计数等于 enumerate() 返回的列表的长度。
threading.current_thread()
此函数返回当前的 Thread 对象,它对应于调用者的线程控制。
threading.get_ident()
此函数返回当前线程的“线程标识符”。这是一个非零整数。
threading.enumerate()
此函数返回当前存活的所有 Thread 对象的列表,包括守护线程,current_thread() 函数创建一个虚拟线程和主线程,并排除已终止的线程和尚未启动的线程。
threading.main_thread()
此函数返回主 Thread 对象。
threading.settrace(func)
当所有线程都从 threading 模块启动时,设置一个跟踪函数。在调用 run() 方法之前,此函数将传递给每个线程的 sys.settrace()。
threading.setprofile(func)
当所有线程都从 threading 模块启动时,设置一个概要分析函数。在调用 run() 方法之前,此函数将传递给每个线程的 sys.setprofile()。
threading.stack_size([size])
此函数返回线程堆栈的大小,它用于创建新线程时。
threading.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
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C编程
C++
C#
MongoDB
MySQL
Javascript
PHP