Python中基于线程的并行性

计算机科学中的线程是可以由调度程序独立管理的一组指令,调度程序是操作系统的一部分。

线程的主要功能是一次运行多个线程。线程意味着不同的任务,程序中的函数调用以及多个线程同时运行,这并不意味着它们在不同的计算机上执行。

在两种情况下使用多线程。

  • 当子程序的输出需要与主程序组合时。

  • 当主程序包含彼此相对独立的代码时。

穿线模块

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