下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
论坛 >编程语言 >python线程笔记(二)

python线程笔记(二)

Abby发布于 2017-09-19 09:37查看:759

     threading 模块

        threading 模块不仅提供了 Thread 类,还 供了各 种非常好用的同步机制。

        下面是threading 模块里所有的对象:

      1. Thread: 表示一个线程的执行的对象

      2. Lock: 锁原语对象(跟 thread 模块里的锁对象相同)

      3. RLock: 可重入锁对象。使单线程可以再次获得已经获得了的锁(递归锁定)。

      4. Condition: 条件变量对象能让一个线程停下来,等待其它线程满足了某个“条件”。 如,状态的改变或值的改变。

      5. Event: 通用的条件变量。多个线程可以等待某个事件的发生,在事件发生后, 所有的线程都会被激活。

      6. Semaphore: 为等待锁的线程 供一个类似“等候室”的结构

      7. BoundedSemaphore: 与 Semaphore 类似,只是它不允许超过初始值

      8. Timer: 与 Thread 相似,只是,它要等待一段时间后才开始运行。

        守护线程

        另一个避免使用 thread 模块的原因是,它不支持守护线程。当主线程退出时,所有的子线程不 论它们是否还在工作,都会被强行退出。有时,我们并不期望这种行为,这时,就引入了守护线程 的概念
        threading 模块支持守护线程,它们是这样工作的:守护线程一般是一个等待客户请求的服务器, 如果没有客户 出请求,它就在那等着。如果你设定一个线程为守护线程,就表示你在说这个线程 是不重要的,在进程退出的时候,不用等待这个线程退出。
如果你的主线程要退出的时候,不用等待那些子线程完成,那就设定这些线程的 daemon 属性。 即,在线程开始(调用 thread.start())之前,调用 setDaemon()函数设定线程的 daemon 标志 (thread.setDaemon(True))就表示这个线程“不重要”
如果你想要等待子线程完成再退出,那就什么都不用做,或者显式地调用 thread.setDaemon(False)以保证其 daemon 标志为 False。你可以调用 thread.isDaemon()函数来判 断其 daemon 标志的值。新的子线程会继承其父线程的 daemon 标志。整个 Python 会在所有的非守护 线程退出后才会结束,即进程中没有非守护线程存在的时候才结束。

     Thread 类

        Thread类提供了以下方法:

      • run(): 用以表示线程活动的方法。

      • start():启动线程活动。

      • join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。

      • is_alive(): 返回线程是否活动的。

      • name(): 设置/返回线程名。

      • daemon(): 返回/设置线程的 daemon 标志,一定要在调用 start()函数前设置

        用 Thread 类,你可以用多种方法来创建线程。我们在这里介绍三种比较相像的方法。

      • 创建一个Thread的实例,传给它一个函数

      • 创建一个Thread的实例,传给它一个可调用的类对象

      • 从Thread派生出一个子类,创建一个这个子类的实例

        下边是三种不同方式的创建线程的示例:

image.png

        与传一个函数很相似的另一个方法是在创建线程的时候,传一个可调用的类的实例供线程启动 的时候执行——这是多线程编程的一个更为面向对象的方法。相对于一个或几个函数来说,由于类 对象里可以使用类的强大的功能,可以保存更多的信息,这种方法更为灵活

image.png

        最后一个例子介绍如何子类化 Thread 类,这与上一个例子中的创建一个可调用的类非常像。使 用子类化创建线程(第 29-30 行)使代码看上去更清晰明了。

image.png

        除了各种同步对象和线程对象外,threading 模块还 供了一些函数。

      • active_count(): 当前活动的线程对象的数量

      • current_thread(): 返回当前线程对象

      • enumerate(): 返回当前活动线程的列表

      • settrace(func): 为所有线程设置一个跟踪函数

      • setprofile(func): 为所有线程设置一个 profile 函数


收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

版主推荐

    共有0条评论

      • IT宅男
      • mr jack
      • Mr ken
      • Mright
      • cappuccino
      • YUI
      • 课课家运营团队
      • 课课家技术团队1
      • 酸酸~甜甜
      • 选择版块:

      • 标题:

      • 内容

      • 验证码:

      • 标题:

      • 内容

      • 选择版块:

      移动帖子x

      移动到: