博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python——thread
阅读量:4514 次
发布时间:2019-06-08

本文共 1786 字,大约阅读时间需要 5 分钟。

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

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

 

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

 exception thread.error 

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

 thread.LockType 

  lock 对象的类型

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

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

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

 thread.interrupt_main() 

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

  Python 2.3 引入

 thread.exit() 

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

 thread.allocate_lock() 

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

 thread.get_ident() 

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

 thread.stack_size([size]) 

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

  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 threada_lock = thread.allocate_lock()with a_lock:    print "a_lock is locked while this executes"

 

注意事项

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

转载于:https://www.cnblogs.com/Security-Darren/p/4185269.html

你可能感兴趣的文章
PC客户端开发细节记录:保存GUID到VARIANT
查看>>
day5感想
查看>>
给DEDE织梦CMS添加搜索结果页显示自定义字段
查看>>
第二章 第五节 获取帮助
查看>>
分布式监控系统Zabbix-3.0.3-完整安装记录(0)
查看>>
关于源代码及其管理工具的总结
查看>>
此文对你人生会有莫大好处的,建议永久保存 2013-07-26 11:04 476人阅读 评论(0) ...
查看>>
win10 压缩包安装mysql8.0.11报错:Access denied for user 'root'@'localhost'
查看>>
随笔:关于去年的WordPress建站的回忆
查看>>
iptables配置——NAT地址转换
查看>>
vue----生命周期
查看>>
tornado ThreadPoolExecutor
查看>>
类里的方法要不要加参数
查看>>
C#毫秒转时分秒格式
查看>>
flask SQLAlchemy pymysql 连接数据库
查看>>
Mac 域名解析
查看>>
ios ViewController present不同的方向
查看>>
未知宽高元素水平垂直居中
查看>>
while 、函数、参数
查看>>
POJ 2762 Going from u to v or from v to u?(Tarjan + 拓扑排序)
查看>>