python中使用threading进行多线程编程 分类: python Module 2014-03-10 16:00 277人阅读 评论(0) 收藏
2014-03-10 16:00
751 查看
http://www.01happy.com/python-multithreading/
详细:http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
多线程,海词翻译为multithreading,就是在一个进程中开启多个线程,而后线程之间可以独立运行自己的任务,而不互相干扰。在python中有thread,threading模块可以实现多线程。从官方手册上来看,threading提供了比thread更高级的线程接口,所以建议使用threading模块。
线程开启方法
在threading模块中,开启线程使用如下方法:
其中target和args比较常用
target线程执行的方法
args 传递给方法的参数,元组对象
简单示例:
start(): 启动线程。
join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数)。
运行上面这个程序,可以看到两个线程会交替输出数据,没有什么规则。需要深入使用可以在官网查看详细的资料,使用起来不算很困难,关键还是要用对地方。
用在哪里
多线程其实就是cpu在不同线程之间进行切换执行,因为cpu的计算速度很快,所以看起来好像是同时执行。如果是计算密集型的任务,开启多线程效果反而不好,因为cpu在线程之间的切换也需要消耗。相反,如果是IO密集型的任务,使用多线程效果就很明显了,例如网络数据传输,文件读写等,因为处于IO阻塞时,cpu会等待IO完成,此时基本不消耗cpu资源。
关于python多线程不支持多核的说法
笔者有一次写了一个多线程的程序,发现运行起来,其中一核占用达到100%,其他三核没什么占用,但是会在不同的核心之间切换,一会这个核100%,一会那个核100%。看来网上的说法python线程不支持多核应当是正确的。
参考资料:
官方手册:http://docs.python.org/2/library/threading.html?highlight=thread
详细:http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
多线程,海词翻译为multithreading,就是在一个进程中开启多个线程,而后线程之间可以独立运行自己的任务,而不互相干扰。在python中有thread,threading模块可以实现多线程。从官方手册上来看,threading提供了比thread更高级的线程接口,所以建议使用threading模块。
线程开启方法
在threading模块中,开启线程使用如下方法:
1 | threading.Thread(group = None , target = None , name = None , args = (), kwargs = {}) |
target线程执行的方法
args 传递给方法的参数,元组对象
简单示例:
1 | #!/usr/bin/env python |
2 | #coding=utf8 |
3 |
4 | import threading |
5 |
6 | def loop2(): |
7 | for i in range ( 10000 , 20000 ): |
8 | i |
9 |
10 | def loop(): |
11 | for i in range ( 1 , 10000 ): |
12 | i |
13 |
14 | #创建两个线程 |
15 | t = threading.Thread(target = loop) |
16 | t2 = threading.Thread(target = loop2) |
17 | #线程开始运行 |
18 | t.start() |
19 | t2.start() |
20 | #线程挂起,直到线程结束 |
21 | t.join() |
22 | t2.join() |
join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数)。
运行上面这个程序,可以看到两个线程会交替输出数据,没有什么规则。需要深入使用可以在官网查看详细的资料,使用起来不算很困难,关键还是要用对地方。
用在哪里
多线程其实就是cpu在不同线程之间进行切换执行,因为cpu的计算速度很快,所以看起来好像是同时执行。如果是计算密集型的任务,开启多线程效果反而不好,因为cpu在线程之间的切换也需要消耗。相反,如果是IO密集型的任务,使用多线程效果就很明显了,例如网络数据传输,文件读写等,因为处于IO阻塞时,cpu会等待IO完成,此时基本不消耗cpu资源。
关于python多线程不支持多核的说法
笔者有一次写了一个多线程的程序,发现运行起来,其中一核占用达到100%,其他三核没什么占用,但是会在不同的核心之间切换,一会这个核100%,一会那个核100%。看来网上的说法python线程不支持多核应当是正确的。
参考资料:
官方手册:http://docs.python.org/2/library/threading.html?highlight=thread
相关文章推荐
- 使用StringIO 分类: python 小练习 2013-06-14 16:00 233人阅读 评论(0) 收藏
- 使用locals()获得类,进行分发 分类: python 小练习 divide into python python基础学习 2014-02-21 14:51 217人阅读 评论(0) 收藏
- 使用random模块,生成动态随机密码 分类: python 小练习 python Module 2013-12-04 17:23 278人阅读 评论(0) 收藏
- 使用python下载文件 分类: python python下载 2013-06-22 16:58 277人阅读 评论(0) 收藏
- 使用生成器返回fibs列表 分类: python Module python基础学习 2013-10-28 18:19 283人阅读 评论(0) 收藏
- 使用文件进行优化 分类: python 小练习 divide into python python基础学习 2014-01-01 14:13 228人阅读 评论(0) 收藏
- 使用fileinput模块进行原地修改文件 分类: python 小练习 2013-08-13 16:47 618人阅读 评论(0) 收藏
- python中的深拷贝和浅拷贝理解 分类: python基础学习 2014-03-10 15:50 292人阅读 评论(0) 收藏
- python数据持久存储:pickle模块的基本使用 分类: python python基础学习 python 小练习 2013-06-17 14:41 209人阅读 评论(0) 收藏
- fileinput模块获取文件的总行数 分类: python 小练习 python Module 2013-12-04 18:19 304人阅读 评论(0) 收藏
- python发送各类邮件的主要方法 分类: python Module python 小练习 2014-01-14 14:52 310人阅读 评论(0) 收藏
- #小练习 使用HTMLParser获取data时注意事项 分类: python 小练习 HTMLParser 2013-11-08 21:05 335人阅读 评论(0) 收藏
- 使用set()求出列表交集 分类: python基础学习 2013-06-16 17:00 241人阅读 评论(0) 收藏
- python变量赋值(可变与不可变) 分类: python基础学习 python Module 2013-10-30 11:59 1036人阅读 评论(0) 收藏
- Qt简介以及如何配置Qt使用VS2010进行开发 分类: QT学习实践 2015-05-05 16:02 34人阅读 评论(0) 收藏
- python 调用shell命令三种方法 分类: python基础学习 python Module 2014-01-13 14:13 239人阅读 评论(0) 收藏
- os.walk()方法 分类: python Module python基础学习 2013-08-09 07:59 342人阅读 评论(0) 收藏
- python中使用eval() 和 ast.literal_eval()的区别 分类: Python 2015-05-11 15:21 1216人阅读 评论(0) 收藏
- if ...__name__使用技巧总结 分类: python基础学习 python Module python 2013-11-01 14:51 262人阅读 评论(0) 收藏
- #小练习 pickle模块 _ 一起存储python对象 分类: python Module 2013-09-05 18:11 399人阅读 评论(0) 收藏