python 多线程的使用
Song •
1325 次浏览 •
0个评论 •
2018年08月04日
python
提供了两个模块来实现多线程thread
和threading
,thread
有一些缺点,在threading
得到了弥补,为了不浪费你和时间,所以我们直接学习threading
就可以了。
#coding=utf-8
import threading
from time import ctime,sleep
def music(func):
for i in range(2):
print "I was listening to %s. %s" %(func,ctime())
sleep(1)
def move(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=move,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 爱情买卖. Wed Aug 1 10:40:46 2018
all over Wed Aug 1 10:40:46 2018
I was at the 阿凡达! Wed Aug 1 10:40:46 2018
继续调整程序:
...
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 爱情买卖. Wed Aug 1 10:38:37 2018
I was at the 阿凡达! Wed Aug 1 10:38:37 2018
I was listening to 爱情买卖. Wed Aug 1 10:38:38 2018
I was at the 阿凡达! Wed Aug 1 10:38:42 2018
all over Wed Aug 1 10:38:47 2018
从执行结果可看到,music
和move
是同时启动的,开始时间38分37秒,直到调用主进程为38分47秒,总耗时为10秒。从单线程时减少了2秒,我们可以把music的sleep()的时间调整为4秒。
用户评论
当前暂无评价,快来发表您的观点吧...
更多相关好文
当前暂无更多相关好文推荐...
-
微信公众号文章/菜单添加小程序时路径如何获取? 2021-12-22
-
如何轻松获取微信小程序路径path? 2021-12-22
-
cannot import name 'CUDA_HOME' from 'mmcv.utils' 2021-12-05
-
vgg的loss一轮达到ln(1/n)阈值,如何解决 2021-11-21
-
如何下载使用utils库 2021-10-27
热门文章
-
微信公众号文章/菜单添加小程序时路径如何获取? 2021-12-22
-
如何轻松获取微信小程序路径path? 2021-12-22
-
python/MySQL分页查询方法与性能优化 2021-06-23
-
mitmproxy & python 忽略所有的https/ssl请求 2021-04-19
-
如何使用邮件/邮箱推广微信公众号/小程序? 2021-01-28
栏目最新文章
公告提示
- pytorch中文文档
- pytorch官方文档
提交评论