python 多线程 入门
来源:互联网 发布:万网域名查询接口 编辑:程序博客网 时间:2024/04/29 05:19
python里的多线程,一直用得不是很多。为了最快速的上手,搞明白多线程到底是个什么鬼,写了个简单的例子
#!/usr/bin/env python#coding:utf-8'''Created on 2016年6月3日@author: lei.wang'''import threadingfrom time import ctime,sleepdef music(entertainment): for i in range(2): print "Listening to %s. %s" %(entertainment,ctime()) sleep(1)def movie(entertainment): for i in range(2): print "Watching the %s. %s" %(entertainment,ctime()) sleep(5)if __name__ == '__main__': threads = [] thread_music = threading.Thread(target=music,args=(u"暗号",)) threads.append(thread_music) thread_movie = threading.Thread(target=movie,args=(u"肖圣克救赎",)) threads.append(thread_movie) for each in threads: each.setDaemon(True) each.start() each.join() print "all threads end at %s" %(ctime())
代码运行结果
Listening to 暗号. Fri Jun 3 12:38:12 2016Watching the 肖圣克救赎. Fri Jun 3 12:38:12 2016Listening to 暗号. Fri Jun 3 12:38:13 2016Watching the 肖圣克救赎. Fri Jun 3 12:38:17 2016all threads end at Fri Jun 3 12:38:22 2016
对代码做个简单的分析:
首先创建一个空的threads列表,用来存放线程。然后分别创建线程thread_music与thread_moive。
将Thread中源码构造函数的说明部分抠出来:
class Thread(_Verbose): """A class that represents a thread of control. This class can be safely subclassed in a limited fashion. """ __initialized = False # Need to store a reference to sys.exc_info for printing # out exceptions when a thread tries to use a global var. during interp. # shutdown and thus raises an exception about trying to perform some # operation on/with a NoneType __exc_info = _sys.exc_info # Keep sys.exc_clear too to clear the exception just before # allowing .join() to return. __exc_clear = _sys.exc_clear def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None): """This constructor should always be called with keyword arguments. Arguments are: *group* should be None; reserved for future extension when a ThreadGroup class is implemented. *target* is the callable object to be invoked by the run() method. Defaults to None, meaning nothing is called. *name* is the thread name. By default, a unique name is constructed of the form "Thread-N" where N is a small decimal number. *args* is the argument tuple for the target invocation. Defaults to (). *kwargs* is a dictionary of keyword arguments for the target invocation. Defaults to {}. If a subclass overrides the constructor, it must make sure to invoke the base class constructor (Thread.__init__()) before doing anything else to the thread."""
通过源码,很容易看出来 thread_music = threading.Thread(target=music,args=(u"暗号",))
是如何构造一个线程的。
jion()方法放在for循环外边,就是说必须要等for循环里的两个进程都结束以后,才能继续执行主进程。
从代码最后的结果来分析,thread_music与thread_movie是同时开始执行的,music进程sleep1s后执行第二次,而movie进程sleep5s后执行第二次。主进程在两个线程都执行完了以后才执行。
0 0
- Python多线程入门
- python 多线程入门
- [Python]多线程入门
- [Python]多线程入门
- python 多线程 入门
- Python多线程入门指南
- [Python]多线程入门 --thread使用
- python多线程和协程开发入门上手
- Python爬虫学习笔记(2):多线程入门
- python入门三(多线程,多进程)
- python网络爬虫入门(三)———多线程
- Python 多线程 入门学习 (一) 持续更新中
- Python 多线程 入门学习 (二) 持续更新中
- 多线程 入门
- 多线程入门
- 多线程入门
- 多线程入门
- 多线程入门
- __int64及__time64_t 格式化
- 在PPT中如何制作光芒四射的背景
- 网络编程中的TCP协议的几点总结
- 二维码生成并美化
- [API]使用Blueprint来高雅的编写接口文档
- python 多线程 入门
- C语言运算符优先级列表(超详细)
- 数字统计
- POJ 3984 迷宫问题(初识BFS)
- ViewPager+RadioGroup高仿微信经典布局
- 通过搬瓦工自建VPS
- 如何在PowerPiont里面裁剪图片?
- java定时任务(三):timerTask定时任务
- Mongodb 安装过程与服务无法启动100、48问题