zoukankan      html  css  js  c++  java
  • python的threading模块

    Python提供了几个用于多线程编程的模块,包括thread, threading和Queue等。thread模块提供了基本的线程和锁的支持。threading模块提供了更高级别,功能更强的线程管理功能。Queue模块可以创建一个多个线程之间共享数据的队列。

    下面介绍threading模块

    threading.Thread

    Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。下面分别举例说明。先来看看通过继承threading.Thread类来创建线程的例子:

    #create a thread with a function
    import threading
    from time import sleep, ctime
    
    loops = [4,2]
    
    def loop(nloop, nsec):
        print 'start loop', nloop, 'at:', ctime()
        sleep(nsec)
        print 'loop', nloop, 'done at:', ctime()
    
    
    def main():
        print 'starting at:', ctime()
        threads=[]
        nloops = range(len(loops))
    
        for i in nloops:
                     #create the thread with the function, target= function name, args = function arguments
                    t = threading.Thread(target=loop, args=(i, loops[i]))
                    threads.append(t)
    
        for i in nloops: #start threads
            threads[i].start()
    
        for i in nloops: #wait for all
            threads[i].join() 
    
        print 'all done at', ctime()
    
    if __name__ == '__main__':
        main()

    这里要说明一下run方法 和start方法: 它们都是从Thread继承而来的,run()方法将在线程开启后执行,可以把相关的逻辑写到run方法中(通常把run方法称为活动[Activity]。);start()方法用于启动线程。

    介绍一下threading.Thread类的初始化函数原型:

    def __init__(self, group=None, target=None, name=None, args=(), kwargs={})

    •   参数group是预留的,用于将来扩展;
    •   参数target是一个可调用对象(也称为活动[activity]),在线程启动后执行;
    •   参数name是线程的名字。默认值为“Thread-N“,N是一个数字。
    •   参数args和kwargs分别表示调用target时的参数列表和关键字参数。

    Thread类还定义了以下常用方法与属性:

    Thread.getName()

    Thread.setName()

    Thread.name

    用于获取和设置线程的名称。

    Thread.ident

    获取线程的标识符。线程标识符是一个非零整数,只有在调用了start()方法之后该属性才有效,否则它只返回None。

    Thread.is_alive()

    Thread.isAlive()

    判断线程是否是激活的(alive)。从调用start()方法启动线程,到run()方法执行完毕或遇到未处理异常而中断 这段时间内,线程是激活的。

    Thread.join([timeout])

    调用Thread.join将会使主调线程堵塞,直到被调用线程运行结束或超时。参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程将一直堵塞到被调线程结束

  • 相关阅读:
    让你在PC上调试Web App,UC浏览器发布开发者版
    多态
    深入理解DIP、IoC、DI以及IoC容器
    设计模式之迪米特原则(LOD)(最少知识原则)
    设计模式之合成/聚合利用原则(CARP)
    设计模式之接口隔离原则(ISP)
    设计模式之依赖倒转原则(DIP)
    设计模式之里氏代换原则(LSP)
    OO设计原则
    SQL分页
  • 原文地址:https://www.cnblogs.com/Y-HKL/p/6580347.html
Copyright © 2011-2022 走看看