Python多线程
来源:互联网 发布:安卓手机优化软件 知乎 编辑:程序博客网 时间:2024/06/08 02:20
父线程的时间是子线程时间最多的和,子线程时间少的相当于不加入总耗时,下面请体会。
# coding=utf-8import threadingfrom time import ctime, sleepdef music(func): for i in range(2): print "I was listening to %s. %s" % (func, ctime()) sleep(1)def movie(func): for i in range(2): print "I was at the %s! %s" % (func, ctime()) sleep(5)threads = []t1 = threading.Thread(target=music, args=(u'爱情买卖',))threads.append(t1)t2 = threading.Thread(target=movie, args=(u'阿凡达',))threads.append(t2)if __name__ == '__main__': for t in threads: t.setDaemon(True) t.start() print "all over %s" % ctime()
import threading
首先导入threading 模块,这是使用多线程的前提。
threads = []
t1 = threading.Thread(target=music,args=(u’爱情买卖’,))
threads.append(t1)
创建了threads数组,创建线程t1,使用threading.Thread()方法,在这个方法中调用music方法target=music,args方法对music进行传参。 把创建好的线程t1装到threads数组中。
接着以同样的方式创建线程t2,并把t2也装到threads数组。
for t in threads:
t.setDaemon(True)
t.start()
最后通过for循环遍历数组。(数组被装载了t1和t2两个线程)
setDaemon()
setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句print “all over %s” %ctime()后,没有等待子线程,直接就退出了,同时子线程也一同结束。
start()
开始线程活动。
运行结果:
I was listening to 爱情买卖. Thu Jun 8 16:21:55 2017I was at the 阿凡达! Thu Jun 8 16:21:55 2017all over Thu Jun 8 16:21:55 2017Process finished with exit code 0
总耗时0秒。
子线程(muisc 、movie )和主线程(print “all over %s” %ctime())都是同一时间启动,但由于主线程执行完结束,所以导致子线程也终止。
调整程序:
...if __name__ == '__main__': for t in threads: t.setDaemon(True) t.start() t.join() print "all over %s" %ctime()
我们只对上面的程序加了个join()方法,用于等待线程终止。join()的作用是,在子线程完成运行之前,这个子线程的父线程将一直被阻塞。
注意: join()方法的位置是在for循环外的,也就是说必须等待for循环里的两个进程都结束后,才去执行主进程。
运行结果:
I was listening to 爱情买卖. Thu Jun 8 16:23:42 2017I was at the 阿凡达! Thu Jun 8 16:23:42 2017I was listening to 爱情买卖. Thu Jun 8 16:23:43 2017I was at the 阿凡达! Thu Jun 8 16:23:47 2017all over Thu Jun 8 16:23:52 2017Process finished with exit code 0
耗时:10秒,相当于两个movie时间
如果是单线程的话总耗时应该是1s+5s+1s+5s=12s,多线程节省时间2秒。
如果我们把music的耗时调整为4s,单线程总耗时应该是4s+5s+4s+5s=18s,下面我们看看多线程耗时:
...def music(func): for i in range(2): print "I was listening to %s. %s" %(func,ctime()) sleep(4)...
结果为:
I was listening to 爱情买卖. Thu Jun 8 16:30:35 2017I was at the 阿凡达! Thu Jun 8 16:30:35 2017I was listening to 爱情买卖. Thu Jun 8 16:30:39 2017I was at the 阿凡达! Thu Jun 8 16:30:40 2017all over Thu Jun 8 16:30:45 2017Process finished with exit code 0
总耗时为10秒,总的时间没变化,但是比单线程的节约8秒。现在应该对本文最开始的说明有了理解了吧。
- Python多线程
- Python多线程
- Python多线程
- python多线程
- python 多线程
- python多线程
- python多线程
- python 多线程
- python多线程
- Python多线程
- Python 多线程
- python多线程
- python 多线程
- {python多线程}
- Python 多线程
- Python多线程
- python 多线程
- Python 多线程
- SpringMVC 手动控制事务提交
- hadoop2.x的简要说明,新特性yarn的加入
- nginx-fpm设置
- 统一接口调用
- 无序数组中求中位数
- Python多线程
- JavaScript字符串indexOf方法浅析
- LeetCode
- 2016年校招编程笔试题汇总 考点:冒泡排序(稳定排序)、不考虑大小写特殊情况、判断字符串是否包含另一个字符串、判断某个字符串中含有某个字符串的个数
- 支持向量机详解
- 康托展开和逆康托展开
- html5移动开发屏幕宽度相关概念
- TensorFlow深度学习框架
- RateLimit