该模块在Python 3中更名为 _thread。

  该模块实现对Python多线程的低层次操作原语,也提供了多线程之间用于同步的锁机制。threading 模块基于本模块提供了更易用的高层次线程API。Windows、Linux、SGI IRIX、Solaris 2.x、和支持 POSIX thread (a.k.a. “pthread”) 的平台都支持该模块,对于不支持 thread 模块的平台,使用 dummy_thread 作为替代。

该模块中定义的常量和函数

exception thread.error

  当出现线程相关的异常时抛出

thread.LockType

  lock 对象的类型

thread.start_new_thread(function, args[, kwargs])

  启动一个新线程,返回它的标识符。

  该新启动的线程会用参数列表 args (必须是一个元组)中的参数调用 function,关键字参数 kwargs 是可选的。当函数 function 返回时,执行它的线程静默退出,当函数因为一个未处理的异常而终止时,线程退出同时打印堆栈轨迹。

thread.interrupt_main()

  在主线程中抛出异常 KeyboardInterrupt,子线程可以使用该函数去打断主线程

  Python 2.3 引入

thread.exit()

  抛出异常 SystemExit,如果这个异常没有被捕获,会让线程静默退出

thread.allocate_lock()

  返回一个新的 lock 对象,该实例初始时没有被上锁

thread.get_ident()

  返回当前线程的线程标识符,这是一个非零整数,值并没有实际意义,就是用来在线程相关的字典中检索指定线程的信息,当一个线程退出时,它的标识符会被回收等待以后创建新线程时使用。

thread.stack_size([size])

  返回创建线程时使用的线程栈大小,可选参数 size 指示以后创建新线程时的栈大小,必须是0(使用平台默认)或者是一个不小于32,768 (32kB)的整数。如果不支持改变线程栈的大小,该函数将会抛出异常 error。如果指定的栈大小无效,将会抛出 ValueError,同时下次新建线程时栈的大小不变。

  32kB 是Python当前支持的最小栈空间,如果没有查阅具体的平台对于线程栈大小的具体规范,使用4KB的倍数是一个比较保险的办法。

  适用于: Windows, systems with POSIX threads.

  Python 2.5 引入

Lock 对象

lock.acquire([waitflag])

  无参数调用时,该方法会无条件的获得锁,或者等待其他的线程释放锁(一次只有一个线程可以获得锁),如果提供整型参数 waitflag,该方法的行为依赖于这个参数:

  如果 waitflag 是0:只有在该锁可以立即获得(不用等待)时才会让这个线程获得锁;

  如果 waitflag 非0:线程会像无参数时那样获取锁

  返回值:

  成果获得锁返回 True ,否则返回 False

lock.release()

  释放锁,必须是已经获得的锁,但可以不是同一个线程。

lock.locked()

  返回 lock 对象的状态:如果已经被某些线程获取就返回 True ,否则返回 False

示例:使用 with 语句使用线程锁

import thread

a_lock = thread.allocate_lock()

with a_lock:
print "a_lock is locked while this executes"

注意事项

  • 线程和中断的交互比较奇怪:异常 KeyboardInterrupt 可以被任意线程接收,(当 signal 模块可用时,中断总是发向主线程
  • 调用 sys.exit() 或抛出异常 SystemExit 等价于调用 thread.exit()
  • acquire() 方法是不可中断的—— KeyboardInterrupt 会在锁获取后才发生
  • 当主线程退出时,其他线程的行为是平台定义的,SGI IRIX 使用可原生的线程实现,所以其他的线程能够存活;在大多数其他平台上,其他的线程会被直接杀掉,而不用执行 try ... finally 分句或其他的对象析构函数
  • 当主线程退出时,不会执行除 try ...finally 以外的其他清理,标准I/O也不会被刷出。

Python——thread的更多相关文章

  1. TLS 与 python thread local

    TLS 先说TLS( Thread Local Storage),wiki上是这么解释的: Thread-local storage (TLS) is a computer programming m ...

  2. Python Thread related

    1.Thread.join([timeout]) Wait until the thread terminates. This blocks the calling thread until the ...

  3. python thread的join方法解释

    python的Thread类中提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行.这个方法还可以设定一个timeout参数,避免无休止的等待.因为两个线程顺序完成,看起来象一个 ...

  4. 【Python@Thread】queue模块-生产者消费者问题

    python通过queue模块来提供线程间的通信机制,从而可以让线程分项数据. 个人感觉queue就是管程的概念 一个生产者消费者问题 from random import randint from ...

  5. 【Python@Thread】Semaphore&糖果机

    信号量适用与多线程竞争有限资源的情况. from atexit import register from time import ctime, sleep from threading import ...

  6. 【Python@Thread】锁示例

    当出现竞态条件时候,即在同一个时刻只有一个线程可以进入临界区,需要使用同步. 常见的同步原语有两种:锁/互斥,信号量. 锁是最简单,最低级的机制. 首先看一个不使用锁时候的多线程示例: from at ...

  7. 【Python@Thread】threading模块

    theading模块的Thread类 属性: name 线程名 ident 线程标识符 daemon  布尔值,标示是否为守护线程 方法: __init__(target=None, name=Non ...

  8. 【Python@Thread】thread模块

    一.关于Python多线程 Python解释器中可以同时运行多个线程,但是再任意时刻只能有一个线程在解释器运行. Python虚拟机的访问是由全局解锁器(GIL)控制的,由GIL保证同时只有一个线程的 ...

  9. Python thread local

    由于GIL的原因,笔者在日常开发中几乎没有用到python的多线程.如果需要并发,一般使用多进程,对于IO Bound这种情况,使用协程也是不错的注意.但是在python很多的网络库中,都支持多线程, ...

  10. test for python thread

    #!/usr/bin/python # -*- coding: UTF-8 -*- import thread import time # 为线程定义一个函数 def print_time(threa ...

随机推荐

  1. 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-4 模态弹出框--结构分析

    模态弹出框--结构分析 Bootstrap框架中的模态弹出框,分别运用了“modal”.“modal-dialog”和“modal-content”样式,而弹出窗真正的内容都放置在“modal-con ...

  2. django 部署,gunicorn、virtualenv、nginx

    声明: 1.本篇文章是我边写命令边写的,请尊重我的劳动成果,转载请加上链接. 2.我既然公开写出来,是希望大家遇到问题的时候有个参考,所以,大家可以免费转载,使用该文章 3.但是,如果你要用这篇文章来 ...

  3. mybatis中的.xml文件总结——mybatis的动态sql

    resultMap resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功. 如果sql查询字段名和pojo的属性名不一致,可以通过re ...

  4. 3. EM算法-高斯混合模型GMM

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 GM ...

  5. 基于jQuery果冻式按钮焦点图切换代码

    基于jQuery果冻式按钮焦点图切换代码.这是一款基于jQuery+CSS3实现的图片切换代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class=&quo ...

  6. java程序设计

    IP地址计数器 原理:获取用户的IP地址,然后存入数据库,当再次访问时查询数据库是否存在该条数据,即可完成此程序 设计过程 创建一个连接数据库类:DB.java package com.count.O ...

  7. 微服务之springCloud-config-bus(十三)

    简介 当我们的业务系统越来越庞大复杂的时候,各种配置就会层出不群.一旦配置修改了,那么我们就是必须修改后停服务,然后再上线,如果服务少,我们可以手动来操作,如果是成千上百的服务,如果是手动操作,肯定就 ...

  8. Mongo分区后分片下count记录不准确

    问题描述 问题如图,后来上网查了一下,发现了这是正常现象: 官方文档解释了这种现象的原因以及解决方法: 不准确的原因: 操作的是分片的集合(前提): shard分片正在做块迁移,导致有重复数据出现 存 ...

  9. android:screenOrientation的说明

    在Android的官方文档当中,对android:screenOrientation的说明如下: http://www.cnblogs.com/snowberg/archive/2012/07/15/ ...

  10. Android——浅谈HTTP中Get与Post的区别(转)

    原文地址:http://network.51cto.com/art/201407/446434.htm Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DEL ...