python多线程模块thread

thread介绍

python提供多线程模块thread及threading,以及队列Queue,其中thread相对比较基础,不容易控制,但并不是说明无用,有些老司机偶尔会使用thead参看底层堆栈内存,官方建议使用threading模块,thread模块在python3版本中被重命名为_thread

Python解释器中可以同时运行多个线程,但是在任意时刻只能有一个线程在解释器运行。
Python虚拟机的访问是由全局解锁器(GIL)控制的,由GIL保证同时只有一个线程的运行。
执行方式如下:
设置GIL
切换到一个进程进行执行
执行下面操作中的一个
  1.运行指定数量的字节码
  2.线程主动出让控制权
将线程设置为睡眠状态,即切换出线程,比如使用sleep(0)
解锁GIL
loop

thread提供以下函数方法:

1.exception thread.error 异常

2.thread.LockType 锁类型

3.thread.start_new_thread(function, args[, kwargs]) 开始一个线程,function函数名称,以及args参数是必须的,如果函数本身没有传参,
则ye需要给args传入一个参数,例如()空列表就可以了,但传入参数时,需要在后面添加上逗号(,),例如thread.start_new_thread(hello, (“tom”,))

4.thread.interrupt_main() 终端main进程

5.thread.exit() 线程退出

6.thread.allocate_lock() 设置锁

7.thread.get_ident() 获取当前线程的标识符,是一个非零的整数

8.thread.stack_size([size]) 内存堆栈的大小,可以是0或大于32Kb的整数,如果大小无效则会抛出异常

注:

1.退出的方法 sys.exit() 或抛出 SystemExit异常
2.当主程序退出时,不论子线程是否执行完成,都会结束,没有线程守护

thread提供锁机制:

1.lock.acquire([waitflag]) 请求锁,waitflag是请求超时时间,如果为0,则表示立即能获得的,若为非零整数,则等待超时时间内获取

2.lock.release() 锁释放

3.lock.locked() 锁的状态

4.thread.allocate_lock() 加载锁

示例如下:
创建两个普通的函数,读书,听音乐

#coding=utf8

from time import ctime,sleep

def readbook(name="time"):
    print "%s  reading book : %s"%(ctime(),name)
    sleep(2)
    print "%s end read book"%(ctime())

def listenmusic(name="好汉歌"):
    print "%s listening music : %s"%(ctime(),name)
    sleep(5)
    print "%s play music " % (ctime())

print "start--- %s"%(ctime())
readbook()
listenmusic()
print "end --- %s"%(ctime())

输出如下࿱

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值