Python——thread
该模块在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的更多相关文章
- TLS 与 python thread local
TLS 先说TLS( Thread Local Storage),wiki上是这么解释的: Thread-local storage (TLS) is a computer programming m ...
- Python Thread related
1.Thread.join([timeout]) Wait until the thread terminates. This blocks the calling thread until the ...
- python thread的join方法解释
python的Thread类中提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行.这个方法还可以设定一个timeout参数,避免无休止的等待.因为两个线程顺序完成,看起来象一个 ...
- 【Python@Thread】queue模块-生产者消费者问题
python通过queue模块来提供线程间的通信机制,从而可以让线程分项数据. 个人感觉queue就是管程的概念 一个生产者消费者问题 from random import randint from ...
- 【Python@Thread】Semaphore&糖果机
信号量适用与多线程竞争有限资源的情况. from atexit import register from time import ctime, sleep from threading import ...
- 【Python@Thread】锁示例
当出现竞态条件时候,即在同一个时刻只有一个线程可以进入临界区,需要使用同步. 常见的同步原语有两种:锁/互斥,信号量. 锁是最简单,最低级的机制. 首先看一个不使用锁时候的多线程示例: from at ...
- 【Python@Thread】threading模块
theading模块的Thread类 属性: name 线程名 ident 线程标识符 daemon 布尔值,标示是否为守护线程 方法: __init__(target=None, name=Non ...
- 【Python@Thread】thread模块
一.关于Python多线程 Python解释器中可以同时运行多个线程,但是再任意时刻只能有一个线程在解释器运行. Python虚拟机的访问是由全局解锁器(GIL)控制的,由GIL保证同时只有一个线程的 ...
- Python thread local
由于GIL的原因,笔者在日常开发中几乎没有用到python的多线程.如果需要并发,一般使用多进程,对于IO Bound这种情况,使用协程也是不错的注意.但是在python很多的网络库中,都支持多线程, ...
- test for python thread
#!/usr/bin/python # -*- coding: UTF-8 -*- import thread import time # 为线程定义一个函数 def print_time(threa ...
随机推荐
- COMPILING ACTIONSCRIPT 3.0 WITH SUBLIME TEXT 2
At Clock we typically spend our time developing JavaScript and PHP, however, occasionally Flash pres ...
- js模板引擎art-template使用方法
art-template是款性能卓越的 js 模板引擎 https://aui.github.io/art-template/ 特性 拥有接近 JavaScript 渲染极限的的性能 调试友好:语法. ...
- SQLite - Java
安装 在 Java 程序中使用 SQLite 之前,我们需要确保机器上已经有 SQLite JDBC Driver 驱动程序和 Java.可以查看 Java 教程了解如何在计算机上安装 Java.现在 ...
- 【转】如何在Mac上卸载Java及安装Java
如何在 Mac 上卸载 Java? 本文适用于: 平台: Macintosh OS X Java 版本: 7.0, 8.0 使用终端卸载 Oracle Java 注:要卸载 Java,必须具有管理员权 ...
- kill-9导致weblogic无法启动
转载自:http://blog.csdn.net/lykangjia/article/details/17486127?rsv_upd=1 今天单位系统遇到一个问题: Resolve Weblogic ...
- log4e下载地址
Log4e的插件的下载地址:log4e.jayefem.de/content/view/3/1/
- 基于jquery结婚电子请柬特效素材
分享基于jquery结婚电子请柬特效素材总共包含3个部分,第一部分是开着小轿车缓缓进入场景,第二部分是相册,第三部分是祝福墙.效果图如下: 在线预览 源码下载 实现的代码. html代码: < ...
- vue前后分离动态路由和权限管理方案
需求 需要根据不同的角色来显示不同的菜单 问题 系统是前后分离模式开发的,出现了后端接口和前端路由都需要权限管理. 思路 后端的接口肯定得验证权限 在前端做好组件名和组件的映射 前端的路由通过后端发回 ...
- Java heap space cdh 5.11.1
在执行hive count 查询的时候报错:Error: Java heap space 解决办法是 set io.sort.mb=10; 执行hadoop的Exeample的时候报错,也是java ...
- html超链接,锚点以及特殊字符
超链接 <a></a>中不加东西是显示不了的. href:跳转的地址 target:_self(本页面打开,默认选项),_blank(新页面打开) title:文本提示 空链接 ...