python中的线程使用--threading模块
来源:互联网 发布:大数据时代下营销伦理 编辑:程序博客网 时间:2024/05/08 16:27
最近又用到了python中的多线程编程,前段时间使用并学习过,但是由于长时间不用,慢慢就忘记怎么用了,毕竟对线程的使用还不是很熟练,现在总结一下,记录下来,加深一下学习的印象。
python中关于线程,主要有两个模块thread和threading,其中thread的模块已不建议使用,因为threading模块更高级,管理线程的功能更强,对线程支持也更强,比如线程同步原语较多,而thread模块的线程同步原语只有一个Lock锁。下面还是对这两种模块分别进行介绍:
1.thread模块
thread模块提供了基本的线程同步锁对象(lock object,也叫原语锁,简单锁,互斥锁,互斥量,二值信号量),模块中常用函数如下:
1.start_new_thread(functon,args, kwargs=None) 产生一个新的线程,在新线程中用指定的参数和可选的kwargs来调用这个函数;
2. allocate_lock() 分配一个LockType类型的锁对象
3. exit() 让线程退出;
LockType类型锁对象方法
1. acquire(wait=None) 尝试获取锁对象
2.locked()如果获取了锁对象返回True,否则返回False
3、release()释放锁
多线程小例子:
#!/usr/bing/env pythonimport threadfrom time import sleep, ctimedef loop0(): print 'start loop 0 at:', ctime() sleep(4) print 'end loop 0 at:', ctime() def loop1(): print 'start loop 1 at:', ctime() sleep(2) print 'end loop 1 at:', ctime() def main(): print 'start at:', ctime() thread.start_new_thread(loop0, ()) thread.start_new_thread(loop1, ()) sleep(6) print 'all done at:', ctime() if __name__ == '__main__': main()输出结果:
start at: Tue Mar 06 22:44:52 2012start loop 1 at: Tue Mar 06 22:44:52 2012start loop 0 at: Tue Mar 06 22:44:52 2012end loop 1 at: Tue Mar 06 22:44:54 2012end loop 0 at: Tue Mar 06 22:44:56 2012all done at: Tue Mar 06 22:44:58 2012输出结果中可以看出,由于使用了多线程,因此总的运行时间减少了,并不是6秒,而是在4秒的时候两个函数就运行结束了,达到了并行执行(起码看起来是并行的)。为了防止主线程退出后,导致loop0和loop1线程退出,因此在主线程中增加了sleep(6),这样就导致整个程序的运行时间没有减少。因此需要使用锁来进行同步。
#!/usr/bin/env python # -*- coding: utf-8 -*-import threadfrom time import sleep, ctimeloops = [4, 2]def loop(nloop, nsec, lock): print 'start loop', nloop , 'at:', ctime() sleep(nsec) print 'end loop 0 at:', ctime() lock.release() def main(): print 'starting at:', ctime() locks = [] nloops = range(len(loops)) for i in nloops: lock = thread.allocate_lock() lock.acquire() locks.append(lock) for i in nloops: thread.start_new_thread(loop, (i, loops[i], locks[i])) for i in nloops: while locks[i].locked():pass print 'all done at:', ctime() if __name__ == '__main__': main()执行结果:
starting at: Wed Mar 07 16:59:08 2012start loop 0 at: Wed Mar 07 16:59:08 2012start loop 1 at: Wed Mar 07 16:59:08 2012end loop 0 at: Wed Mar 07 16:59:10 2012end loop 0 at: Wed Mar 07 16:59:12 2012all done at: Wed Mar 07 16:59:12 2012从结果中可以看出,总的运行时间变为4秒,达到了并行执行。
- python中的线程使用--threading模块
- Python 线程的使用(threading模块)
- Python 使用threading 模块创建线程
- python中的threading模块
- python 中的线程处理——threading模块
- python threading模块的使用
- python核心编程-线程之threading模块
- python核心编程-线程threading模块二
- 线程与threading模块(python)
- Python:使用threading模块实现多线程编程八[使用Event实现线程间通信]
- Python:使用threading模块实现多线程编程八[使用Event实现线程间通信]
- Python:使用threading模块实现多线程编程
- Python:使用threading模块实现多线程编程
- Python:使用threading模块实现多线程
- python 多线程threading模块的使用
- Python:使用threading模块实现多线程
- Python:使用threading模块实现多线程
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- 基于BroadCastReceiver的SD卡装载卸载实例!
- main函数和启动例程
- 软件开发流程
- 一个Android多线程下载器
- 栈
- python中的线程使用--threading模块
- ibatis2.3.4 配置主键自动生成
- 队列
- 框架子页面关闭所有窗口
- Activity详细讲解
- 程序员应该读的故事:三个事和三个问题
- 如何用UIKit做一个转轮
- 用ajax自己写仿 google search suggest的搜索提示
- 使用Python读取TestTrack记录- Part1