python3 threading

本文大部分摘自手册上。
该模块定义了以下功能:

1.) threading.active_count()

返回Thread当前活着的对象的数量。
返回的值等于enumerate()返回的列表长度大小。

# 1.)在线程中查看
# -*- coding:utf8 -*-
import threading
import time
#python3.6

def test():
    print(threading.active_count())
    time.sleep(5)

if __name__ == "__main__":
    for x in range(4):
        t = threading.Thread(target=test)
        t.start()

#结果
# 因为包含了主线程(主进程那个,所以+1)
# 2
# 3
# 4
# 5
# 2.)在主进程(主线程中)查看   
# -*- coding:utf8 -*-
import threading
import time
#python3.6


def test():
    time.sleep(5)

if __name__ == "__main__":
    for x in range(4):
        t = threading.Thread(target=test)
        t.start()
    print(threading.active_count())

#结果
# 5 

2.) threading.current_thread()

#返回当前Thread对象,对应于调用者的控制线程。
#如果调用者的控制线程不是通过threading模块创建的 ,
#则返回具有有限功能的虚拟线程对象。
# -*- coding:utf8 -*-
import threading
import time

def test():
    print(threading.current_thread())
    time.sleep(5)

if __name__ == "__main__":
    for x in range(4):
        t = threading.Thread(target=test)
        t.start()
    print(threading.current_thread())
# #结果
# <Thread(Thread-1, started 7860)>
# <Thread(Thread-2, started 10024)>
# <Thread(Thread-3, started 1588)>
# <Thread(Thread-4, started 2828)>
# <_MainThread(MainThread, started 5040)>

3.) threading.get_ident()

返回当前线程的'线程标识符'。这是一个非零整数。
它的价值没有直接的意义; 
它的目的是用作一个魔术cookie,例如索引线程特定数据字典。
当线程退出并创建另一个线程时,线程标识符可以循环使用。
# -*- coding:utf8 -*-
import threading
import time

def test():
    print(threading.get_ident())
    print(threading.current_thread())
    time.sleep(5)

if __name__ == "__main__":
    for x in range(4):
        t = threading.Thread(target=test)
        t.start()
    print(threading.get_ident())
    print(threading.current_thread())

# 结果
# 9816
# <Thread(Thread-1, started 9816)>
# 1072
# <Thread(Thread-2, started 1072)>
# 8236
# <Thread(Thread-3, started 8236)>
# 8752
# 10692  #主线程的。
# <Thread(Thread-4, started 8752)>
# <_MainThread(MainThread, started 10692)>

3.3版本的新功能。

4.) threading.enumerate()

返回Thread当前活着的所有对象的列表。
该列表包括守护进程线程,由其创建的虚拟线程对象 current_thread()以及主线程。
它排除了尚未启动的已终止的线程和线程。
# -*- coding:utf8 -*-
import threading
import time



def test():

    print(threading.enumerate())
    time.sleep(5)

if __name__ == "__main__":
    for x in range(4):
        t = threading.Thread(target=test)
        t.start()
    print(threading.enumerate())

5.) threading.main_thread()

返回主Thread对象。在正常情况下,主线程是Python解释器启动的线程。

3.4版新增功能

6.) threading.settrace(func )

为从threading模块启动的所有线程设置跟踪功能。
在它的run方法被调用前,该func将被传递给 sys.settrace()每个线程。

7.) threading.setprofile(func )

为从threading模块启动的所有线程设置配置文件功能。
在它的run方法被调用前,该func将被传递给 sys.setprofile()每个线程。

8.) threading.stack_size([ size ] )

返回创建新线程时使用的线程堆栈大小。可选的 size参数指定要用于随后创建的线程的堆栈大小,并且必须为0(使用平台或配置的默认值)或至少32,768(32 KiB)的正整数值。如果未指定大小,则使用0。如果不支持更改线程堆栈大小,RuntimeError则会引发a。如果指定的堆栈大小无效,aValueError并且堆栈大小未修改。32 KiB是目前支持的最小堆栈大小值,以保证解释器本身具有足够的堆栈空间。请注意,某些平台可能对堆栈大小的值有特别的限制,例如要求最小堆栈大小> 32 KiB或需要以系统内存页大小的倍数进行分配 - 有关更多信息,请参阅平台文档(4 KiB页是常见的;对于堆栈大小,使用4096的倍数是没有更具体信息的建议方法)。可用性:Windows,带有POSIX线程的系统。

该模块还定义了以下常量:

9.) threading.TIMEOUT_MAX

允许的最大值的超时阻断功能的(参数Lock.acquire(),RLock.acquire(),Condition.wait()等等)。指定超过此值的超时将引发一次 OverflowError。

3.2版本中的新功能

该模块定义了许多类,这些类将在下面的章节中详细介绍。

这个模块的设计松散地基于Java的线程模型。但是,在Java为锁和条件变量生成每个对象的基本行为的地方,它们是Python中的单独对象。Python的Thread类支持Java的Thread类的一部分行为; 目前没有优先级,没有线程组,线程不能被销毁,停止,暂停,恢复或中断。Java的Thread类的静态方法在实现时映射到模块级函数。

下面描述的所有方法都是以原子方式执行的。

10.) 线程局部数据

线程本地数据是其值为线程特定的数据。要管理线程本地数据,只需创建一个local(或一个子类)的实例并在其上存储属性:

mydata = threading.local()
mydata.x = 1

class threading.local
表示线程本地数据的类。

11.)线程对象

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

group: 是为将来预留的。
target: 重要的参数,要由run()方法调用的可调用对象。默认为None,意味着什么都不调用。
name: 线程的名称。默认情况下,一个唯一的名称由“Thread- N ” 形式构成,其中N是小数字。
args: 目标调用的参数元组。默认为()。
kwargs : 目标调用的关键字参数字典。默认为{}
daemon: 默认是None,默认是不是守护线程。守护线程是主线程执行完毕后,也结束运行。
默认情况下,其他线程在主线程执行完毕后,依旧执行。

他的示例 t 一些方法:
https://blog.csdn.net/baidu_36831253/article/details/78268718

t.start():
    通过在一个单独的控制线程中调用run方法,启动线程。此方法只能调用一次。

t.run():
    线程启动时将调用此方法。默认,它将调用传递到调用函数中的目标函数。
    可以使用继承Thread的子类中重写该方法

t.join([timeout])
    等待直到线程终止或者出现超时为止。timeout为浮点数,单位秒。
    线程启动之前,不能调用它。

t.is_alive():
    判断线程是否活动,返回True或False.线程从start()开始,到run()结束之前都是活动的。
    t.isalive()该方法别名。

t.name:
    属性,线程名称,线程名为唯一标识符。
    getName()
    setName()

t.ident:
    属性,整数线程标识符。如果线程尚未启动,它的值为None.

t.daemon:
    线程的布尔型后台标识。
    必须在调用start()方法之前设置这个标识,它的初始值从创建线程的后台状态继承而来。
    isDaemon()
    setDaemon()

猜你喜欢

转载自blog.csdn.net/baidu_36831253/article/details/79800187