zoukankan      html  css  js  c++  java
  • Python的并发并行[1] -> 线程[0] -> threading 模块

    threading模块 / threading Module


    1 常量 / Constants

     Pass

    2 函数 / Function

    2.1 setprofile()函数

    函数调用: threading.setprofile(func)

    函数功能:为所有线程设置一个profile函数

    传入参数: func

    func: method类型,

    返回参数:

    2.2 settrace()函数

    函数调用: threading.settrace(func)

    函数功能:为所有线程设置一个trace函数

    传入参数: func

    func: method类型,

    返回参数:

    2.3 active_count()函数

    函数调用: num = threading.active_count()

    函数功能:返回当前活动的线程个数

    传入参数:

    返回参数: num

    num: int类型,当前活动的线程个数

    2.4 current_thread()函数

    函数调用: cthr = threading.current_thread()

    函数功能:返回当前运行的线程

    传入参数:

    返回参数: cthr

    cthr: instance类型,当前运行的线程的实例或一个DummyThread

    2.5 enumerate()函数

    函数调用: thr_list = threading.enumerate()

    函数功能:返回当前活动的线程对象列表

    传入参数:

    返回参数: thr_list

    thr_list: list类型,列表包含当前活动的所有线程对象

    2.6 stack_size()函数

    函数调用: size = threading.stack_size()

    函数功能:返回新建线程的栈大小

    传入参数:

    返回参数: size

    size: int类型,新线程栈的大小

     

    3 / Class

    3.1 Thread

    类实例化:thr = threading.Thread(group=None, target=None, name=None, args=(), daemon=None)

    类的功能: 用于生成一个新的线程实例

    传入参数: group, target, name, args, daemon

    group: NoneType类型,目前仅支持为None

    target: obj/func类型,需要可调用

    name: str类型,线程的名称,为None则线程会根据生成的顺序自动赋予名字

    args: tuple类型,传给target的参数(还有kwargs未注出)

    daemon: bool类型,设置是否为守护线程

    返回参数: thr

    thr: instance类型,生成的新的线程实例

    3.1.1 name属性方法

    属性调用: n = thr.name / thr.name = n

    属性功能: 返回线程的名称 / 设置线程的名称

    属性参数: n

    n: str类型,线程的名称

    3.1.2 ident属性方法

    属性调用: i = thr.ident

    属性功能: 返回线程的标识符

    属性参数: i

    i: str/NoneType类型,线程的标识符

    3.1.3 daemon属性方法

    属性调用: thr.daemon / thr.daemon = b

    属性功能: 返回线程的守护线程标识 / 设置守护线程标识

    属性参数: b

    b: bool类型,线程的守护线程标识,True表示为守护线程

    3.1.4 start()方法

    函数调用: thr.start()

    函数功能:开始执行该线程

    传入参数:

    返回参数:

    3.1.5 run()方法

    函数调用: thr.run() / thr.start()

    函数功能:线程的功能函数,线程开始时执行,通常在子类中被用户重定义,一般通过start()函数调用

    传入参数:

    返回参数:

    3.1.6 join()方法

    函数调用: thr.join(timeout=None)

    函数功能:使线程挂起,除非给出timeout,否则一直阻塞,直至启动的线程全部结束

    传入参数: timeout

    timeout: None/int类型,设置阻塞超时时间(s)

    返回参数:

    3.1.7 is_alive()方法

    函数调用: s = thr.is_alive()

    函数功能:查看线程是否处在运行状态

    传入参数:

    返回参数: s

    s: bool类型,线程是否在运行中,True则运行中,False则停止

     

    3.2 Lock/RLock

    类实例化:lock = threading.Lock()/RLock()

    类的功能:用于生成(可重入锁)线程锁,对于Lock,其本质是由threading._allocate_lock(由_thread.allocate_lock重命名而来)赋值得到,可通过help(threading.Lock)查看

    传入参数:

    返回参数: lock

    lock: instance类型,生成的(可重入锁)线程锁实例

    3.2.1 acquire()方法

    函数调用: lock.acquire()

    函数功能:获得线程锁,使资源被锁定,其他线程无法访问

    传入参数:

    返回参数:

    3.2.2 release()方法

    函数调用: lock.release()

    函数功能:释放线程锁,使资源解锁可被其他线程使用

    传入参数:

    返回参数:

     

    3.3 Semaphore / BoundedSemaphore

    类实例化:sep = threading.Semaphore(value=1)/BoundedSemaphore(value=1)

    类的功能:生成一个(有界)信号量的实例。对于(有界)信号量来说,内部管理着一个计数器,计数器的初始值由value传入,默认为1,调用acquire()函数会使计数器-1,调用release()函数会使计数器+1,对于信号量来说,计数器值永远不会小于0,当计数器为0时,再调用acquire()函数则会阻塞,等待其他线程release。而对于BoundedSemaphore,则多了一个上限值,即计数器的值不能超过初始值value,否则会抛出一个ValueError(计数器release次数过多,意味着可能存在bug)。Semaphore中同样支持上下文管理协议。

    传入参数: value

    value: int类型,初始信号量数,用于设置内部计数器初始值

    返回参数: sep

    sep: instance类型,信号量实例

    3.3.1 _value属性

    属性调用: value = sep._value

    属性功能: 返回当前信号量可用数(可供acquire()-1的数量)

    属性参数: value

    value: int类型,可用信号量的剩余值

    3.3.2 acquire()方法

    函数调用: sep.acquire(blocking=True, timeout=None)

    函数功能:获取信号量,会使信号量计数器-1

    传入参数: blocking, timeout

    blocking: bool类型,用于设置是否阻塞等待,为True则当计数器为0时,会阻塞等待计数器,直到其他线程调用release()方法使计数器为正。若为False则不会进行阻塞等待,当计数器为0时,返回False

    timeout: int类型,用于设置阻塞超时,当阻塞时间超过timeout时,返回False

    返回参数:

    3.3.3 release()方法

    函数调用: sep.release()

    函数功能:释放信号量,会使信号量计数器+1

    传入参数:

    返回参数:

     

    3.4 Condition

    类实例化:cond = threading.Condition(lock=None)

    类的功能:生成一个条件变量,用于进行等待唤醒控制

    传入参数: lock

    lock: instance类型,锁的实例,用于替换内置的RLock锁

    返回参数: cond

    cond: instance类型,生成的一个条件控制变量实例

    3.4.1 acquire属性

    属性调用: cond.acquire()

    属性功能: 其本质是Condition内置锁的acquire函数,源码中在初始化时指向了Condition的类实例属性cond.acquire,因此可以直接对实例属性进行调用,获取锁权限

    属性参数: acquire

    acquire: function类型,是Condition内置锁的acquire方法

    3.4.2 release属性

    属性调用: cond.release()

    属性功能: 其本质是Condition内置锁的release函数,源码中在初始化时指向了Condition的类实例属性cond.release,因此可以直接对实例属性进行调用,释放锁权限

    属性参数: release

    release: function类型,是Condition内置锁的release方法

    3.4.3 wait()函数

    函数调用: cond.wait(timeout=None)

    函数功能:挂起当前线程,进入等待唤醒状态,同时出让Condition内置锁的权限

    传入参数: timeout

    timeout: int/NoneType类型,设置等待的超时限制

    返回参数:

    3.4.4 wait_for()方法

    函数调用: re = cond.wait_for(predicate, timeout=None)

    函数功能:挂起当前线程,调用predicate函数等待返回结果为True

    传入参数: predicate, timeout

    predicate: function类型,等待的条件函数

    timeout: int/NoneType类型,设置等待条件函数的超时时间

    返回参数: re

    re: bool类型,条件等待的结果,条件函数返回True则此处为True,条件函数返回False或等待超时,都会返回False

    3.4.5 notify()方法

    函数调用: cond.notify(n=1)

    函数功能:按照进入等待的顺序唤醒相应数量的等待线程

    传入参数: n

    n: int类型,唤醒线程的数量

    返回参数:

    3.4.6 notify_all()方法

    函数调用: cond.notify_all()

    函数功能:按照进入等待的顺序唤醒所有等待线程

    传入参数:

    返回参数:

    3.5 Event

    类实例化:evt = threading.Event()

    类的功能:通过内置标志位控制线程的类

    传入参数:

    返回参数: evt

    evt: instance类型,生成的时间出发类实例

    3.5.1 is_set()方法

    函数调用: re = evt.is_set()

    函数功能:查看内置标志位状态

    传入参数:

    返回参数: re

    re: bool类型,内置的标志位值

    3.5.2 set()方法

    函数调用: evt.is_set()

    函数功能:设置内置标志位为True,唤醒等待线程。其实质为with cond的notify_all

    传入参数:

    返回参数:

    3.5.3 clear()方法

    函数调用: evt.clear()

    函数功能:设置内置标志位为False,其本质为with cond下的Flag=False

    传入参数:

    返回参数:

    3.5.4 wait()方法

    函数调用: [re = ]evt.wait(timeout=None)

    函数功能:查看内置标志,判断是否进入等待,其本质为cond.wait()

    传入参数: timeout

    timeout: int类型,设置的超时时间

    返回参数: re

    re: bool类型,等待结束返回True,超时或失败返回False

    3.6 Barrier

    类实例化:barr = threading.Barrier(parties, action=None, timeout=None)

    类的功能:建立一个线程阻碍实例,直到线程阻碍的wait数量达到设置值时,会释放所有等待的线程

    传入参数: parties, action, timeout

    parites: int类型,设置障碍阻塞线程的数量,达到此数量则释放阻塞

    action: function类型,当越过障碍时,由其中一个线程执行该函数一次

    timeout: int类型,障碍等待的超时时间

    返回参数: barr

    barr: instance类型,返回的障碍实例

    3.6.1 parties属性方法

    属性调用: parties = barr.parites()

    属性功能: 返回跨越障碍所需要的等待线程数量

    属性参数: parties

    parties: int类型,跨越障碍所需的线程数量

    3.6.2 n_waiting属性方法

    属性调用: n = barr.n_waiting()

    属性功能: 返回当前障碍中正在等待的线程数量

    属性参数: n

    n: int类型,当前障碍中正在等待的线程数量

    3.6.3 wait()方法

    函数调用: barr.wait(timeout=None)

    函数功能:使线程挂起阻塞,并且使障碍等待线程数量增加一个

    传入参数: timeout

    timeout: int类型,设置的超时时间

    返回参数:

    3.7 Timer

    类实例化:timex = threading.Timer(interval, function, args=None, kwargs=None)

    类的功能:生成一个延时调用函数的线程实例,基类为Thread,本质基于Event

    传入参数: interval, function, args, kwargs

    interval: int/float类型,函数延迟启动的时间

    function: function类型,需要调用的函数

    args: 传递给function的参数

    kwargs: 传递给function的默认参数

    返回参数: timex

    timex: instance类型,延迟线程的类实例

    3.7.1 cancel()方法

    函数调用: timex.cancel()

    函数功能:取消对延迟函数的延迟等待,如果延迟函数还未启动

    传入参数:

    返回参数:

    3.7.2 run()方法

    函数调用: timex.run()

    函数功能:开启延时线程实例的计时

    传入参数:

    返回参数:

    3.8 _DummyThread

    类实例化:_dummy = _DummyThread()

    类的功能:代表当前未运行的线程,常在current_thread中调用不是通过threading生成的线程时,返回一个功能有限的DummyThread

    传入参数:

    返回参数: _dummy

    _dummy: instance类型,Dummy线程,守护线程性质

    3.9 _MainThread

    类实例化:_main_thread = _MainThread()

    类的功能:生成模块内代表主线程的特殊线程

    传入参数:

    返回参数: _main_thread

    _main_thread: instance类型,代表主线程的实例

  • 相关阅读:
    iptables服务器主机防火墙
    VMware克隆Linux虚拟机报错
    CentOS7.3下yum安装MariaDB10.3.12并指定utf8字符集
    CentOS7.3yum安装MariaDB报错[Errno 256]
    [LeetCode] 121. Best Time to Buy and Sell Stock
    [LeetCode] 116. Populating Next Right Pointers in Each Node
    [LeetCode] 113. Path Sum II
    jQuery实现图片添加及预览
    H5移动端适配——解决移动端必须手动调整以适配的问题
    [LeetCode] 110. Balanced Binary Tree
  • 原文地址:https://www.cnblogs.com/stacklike/p/8150232.html
Copyright © 2011-2022 走看看