Python多线程4:_thread

_thread模块是threading模块的基础模块,为多线程提供了低级别的基元(也称为轻量级进程或任务)。为了同步,简单的锁(也叫做互斥锁或二元信号量)被提供。threading模块在该模块的基础上提供了更易使用并且更高级别的线程API。

该模块支持Windows、Linux、SGI IRIX、Solaris 2.x、以及任何实现了POSIX线程的系统。

_thread模块

它定义了如下的常量和函数:

exception _thread.error

线程错误。从3.3版本呢开始相当于RuntimeError。

_thread.LockType 

锁对象类型。

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

开始一个新的线程并返回它的标识符。线程使用参数args(必须是一个元组)执行function函数。可选参数kwargs制定了一个参数字典。当函数返回时,线程退出。当函数异常终止时,一个栈轨迹被打印然后线程退出(但是其它线程继续执行)。

_thread.interrupt_main()

在主线程抛出一个KeyboardInterrupt异常。一个子线程能用这个函数中断主线程。

_thread.exit()

抛出SystemExit异常。如果不被捕获,将导致线程退出。

_thread.allocate_lock()

返回一个新的锁对象。锁的方法在下一节讲述。锁初始处于未锁状态。

_thread.get_ident()

返回当前线程的“线程标识符”。这是一个非0整数。它的值没有直接的含义;他被作为魔法饼干使用,例如:索引特定线程数据的字典信息。线程标识符会被循环使用。

_thread.stack_size([size])

返回线程栈的大小,当创建新线程的时候使用。可选参数size指定接下来创建线程需要的栈大小,必须是0(用平台或者配置默认)或者一个最小32768(32KiB)的正整数,如果改变线程栈大小不被支持,一个RuntimeError异常被抛出;如果指定的栈大小是无效的,一个ValueError被抛出并且栈大小不被修改。32KiB是当前支持的最小的栈大小,为解释器自身保证足够的栈空间。注意,一些平台对栈大小的值有特殊的限制,例如要求最小栈大小大于32KiB,或者要求必须分配系统内存页大小的倍数(参考平台文档,页大小通常是4KiB)。在以下平台可用:Windows、带有POSIX线程的系统。

_thread.TIMEOUT_MAX

Lock.acquire()的timeout参数允许的最大值。若指定的值超过该值,则抛出OverflowError。

Lock对象

Lock对象包含下面的方法。

lock.acquire(waitflag=1, timeout=-1)

不带参数的情况下,该方法无条件地请求锁,如有必要,线程将等待直到其它线程释放锁(一次仅一个线程能获取锁)。

如果整数参数waitflag被设置,行为将依赖该参数的值:如果为0,锁将不等待立即返回,如果为非0,则锁则无条件地等待。

如果浮点型参数timeout被设置并且大于0,它指定等待的最大秒数。一个负的timeout表示永久等待。如果waitflag为0,你不能指定timeout。

如果锁获取成功,则返回True,否则,返回False。

从3.2版开始,acquire能被POSIX的信号中断。

lock.release()

释放锁,锁必须先被获取,但不要求是同一个线程。

lock.locked()

返回锁的状态:如果已经被某个线程获取,则返回True,否则返回False。

对于这些方法,也能通过with语句来使用,例如:

import _thread

a_lock = _thread.allocate_lock()

with a_lock:
    print("a_lock is locked while this executes")
时间: 2024-11-29 10:44:59

Python多线程4:_thread的相关文章

python多线程与threading模块

python多线程与_thread模块 中介绍了线程的基本概念以及_thread模块的简单示例.然而,_thread模块过于简单,使得我们无法用它来准确地控制线程,本文介绍threading模块,它提供了更强大的多线程管理方案. threading模块的对象 Thread 表示一个执行线程的对象 Lock 锁原语 RLock 可重入锁对象,使单一线程可以再次获得已持有的锁(递归锁) Condition 条件变量对象,使得一个线程等待另一个线程满足特定条件 Event 条件变量的通用版本,任意数量

Python多线程和Python的锁

Python多线程 Python中实现多线程有两种方式,一种基于_thread模块(在Python2.x版本中为thread模块,没有下划线)的start_new_thread()函数,另一种基于threading模块的Thread类. 其实Python的多线程编程不能真正利用多核的CPU,但是用开源模块使你的计算压力分布到多核CPU上......... 一.使用start_new_thread()实现线程,是比较底层的实现方式,所有线程共享他们global数据,为了达到同步,模块也提供了简单的

Python多线程与多进程(一)

多线程 多线程是程序在同样的上下文中同时运行多条线程的能力.这些线程共享同一个进程的资源,可以在并发模式(单核处理器)或并行模式(多核处理器)下执行多个任务 多线程有以下几个优点: 持续响应:在单线程的程序中,执行一个长期运行的任务可能会导致程序的冻结.多线程可以把这个长期运行的任务放在一个线程中,在程序并发的运行任务时可以持续响应客户的需求 更快的执行速度:在多核处理器的操作系统上,多线程可以通过真正的并行提高程序的运行速度 较低的资源消耗:利用线程模式,程序可以利用一个进程内的资源响应多个请

基于Windows平台的Python多线程及多进程学习小结

python多线程及多进程对于不同平台有不同的工具(platform-specific tools),如os.fork仅在Unix上可用,而windows不可用,该文仅针对windows平台可用的工具进行总结. 1.多线程 单线程中,如果某一任务(代码块)是long-time running的,则必须等待该任务(代码块)结束,才可以对下一个任务进行操作,为解决long-time 任务的block问题,可将创建多个线程,间隔选择多线程进行操作.python 中多线程常用的库为_thread,thr

python多线程

http://blog.csdn.net/pipisorry/article/details/45306973 CPU-bound(计算密集型) 和I/O bound(I/O密集型) I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高.CPU bound 指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好很多,此时,系统运作,大部分的状况是 CPU Lo

Python多线程实现方法有几种

目前python多线程实现方式有很多种比如:thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用. 2.7 版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了 multithreading模块.threading模块里面主要是对一些线程的操作对象化,创建Thread的class.一般来说,使用线程有两种 模式:

python多线程、多进程以及GIL

多线程 使用threading模块创建线程 传入一个函数 这种方式是最基本的,即调用threading中的Thread类的构造函数,然后指定参数target=func,再使用返回的Thread的实例调用start()方法,即开始运行该线程,该线程将执行函数func,当然,如果func需要参数,可以在Thread的构造函数中传入参数args=(-).示例代码如下 import threading #用于线程执行的函数 def counter(n): cnt = 0; for i in xrange

Python多线程锁

[Python之旅]第六篇(四):Python多线程锁 python lock 多线程 多线程使用方法 多线程锁 摘要:   在多线程程序执行过程中,为什么需要给一些线程加锁以及如何加锁,下面就来说一说. 1.给线程加锁的原因     我们知道,不同进程之间的内存空间数据是不能够共享的,试想一下,如果可以随意共享,谈何安全?但是一个进程中的多个线程是可以共享这个进程的内存空间中的数据的,比如多个线程可以同时调用某一... 在多线程程序执行过程中,为什么需要给一些线程加锁以及如何加锁,下面就来说一

python多线程学习记录

1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start(),启动线程 t.join(),阻塞当前线程,即使得在当前线程结束时,不会退出.会等到子线程结束之后才退出. 如果不加join语句,主线程不会等到子线程结束才结束,但却不会立即杀死该线程. 但是如果添加了SetDaemon(True),如果不加join,则会在主线程结束后马上杀死子线程. 如果join

python多线程实现抓取网页

Python实现抓取网页 下面的Python抓取网页的程序比较初级,只能抓取第一页的url所属的页面,只要预定URL足够多,保证你抓取的网页是无限级别的哈,下面是代码: ##coding:utf-8 ''' 无限抓取网页 @author wangbingyu @date 2014-06-26 ''' import sys,urllib,re,thread,time,threading ''' 创建下载线程类 ''' class download(threading.Thread): def __