python:3.8.10官方文档学习
1:基于线程的并行
在 CPython 中,由于存在 全局解释器锁,同一时刻只有一个线程可以执行 Python 代码(虽然某些性能导向的库可能会去除此限制)。
如果你想让你的应用更好地利用多核心计算机的计算资源,推荐你使用 multiprocessing 或 concurrent.futures.ProcessPoolExecutor
但是,如果你想要同时运行多个 I/O 密集型任务,则多线程仍然是一个合适的模型
多进程并发适合:I/O 密集型任务
1:threading.
active_count
() 返回当前存活的Thread
对象的数量。 返回值与enumerate()
所返回的列表长度一致
2:threading.
current_thread
() 返回当前对应调用者的控制线程的Thread
对象。如果调用者的控制线程不是利用threading
创建,会返回一个功能受限的虚拟线程对象。
3:threading.
excepthook
(args, /) 处理由Thread.run()
引发的未捕获异常。
4:threading.
get_ident
() 返回当前线程的 “线程标识符”。它是一个非零的整数,它的值没有直接含义,主要是用作 magic cookie,
比如作为含有线程相关数据的字典的索引。线程标识符可能会在线程退出,新线程创建时被复用
5:threading.
get_native_id
() 返回内核分配给当前线程的原生集成线程 ID,这是一个非负整数。
它的值可被用来在整个系统中唯一地标识这个特定线程(直到线程终结,在那之后该值可能会被 OS 回收再利用)。
6:threading.
enumerate
() 以列表形式返回当前所有存活的Thread
对象。 该列表包含守护线程,
current_thread(
)当前运行的线程创建的虚拟线程对象和主线程。它不包含已终结的线程和尚未开始的线程
7:threading.
main_thread
() 返回主Thread
对象。一般情况下,主线程是Python解释器开始时创建的线程(返回主线程)
8:threading.
settrace
(func) 为所有threading
模块开始的线程设置追踪函数。在每个线程的run()
方法被调用前,func 会被传递给sys.settrace() 性能测试使用使用
9:threading.
setprofile
(func) 为所有threading
模块开始的线程设置性能测试函数。在每个线程的run()
方法被调用前,func 会被传递给sys.setprofile()
10:threading.
stack_size
([size]) 返回创建线程时使用的堆栈大小。可选参数 size 指定之后新建的线程的堆栈大小,
而且一定要是0(根据平台或者默认配置)或者最小是32,768(32KiB)的一个正整数。如果 size 没有指定,默认是0。
如果不支持改变线程堆栈大小,会抛出RuntimeError
错误。如果指定的堆栈大小不合法,会抛出ValueError
错误并且不会修改堆栈大小。
32KiB是当前最小的能保证解释器有足够堆栈空间的堆栈大小。需要注意的是部分平台对于堆栈大小会有特定的限制,
例如要求大于32KiB的堆栈大小或者需要根据系统内存页面的整数倍进行分配
应当查阅平台文档有关详细信息(4KiB页面比较普遍,在没有更具体信息的情况下,建议的方法是使用4096的倍数作为堆栈大小)
11:threading.
TIMEOUT_MAX
阻塞函数(Lock.acquire()
,RLock.acquire()
,Condition.wait()
, ...)中形参timeout 允许的最大值。
传入超过这个值的 timeout 会抛出OverflowError
异常
print(threading.TIMEOUT_MAX) 4294967.0
最多只允许阻塞这么长时间