- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
python_thread常用方法
read对象中的一些方法:????以前说过多线程,用到threading模块中的Thread对象,其中的start和run方法比较熟悉了,start()是重载了Thread对象中的run方法,其实作用还是,当执行这个start方法的时候,将运行run方法。????今天看看其他几个重要的方法:???1 join方法,如果一个线程或者一个函数在执行过程中要调用另外一个线程,并且待到其完成以后才能接着执行,那么在调用这个线程时可以使用被调用线程的join方法。join([timeout])????里面的参数时可选的,代表线程运行的最大时间,即如果超过这个时间,不管这个线程有没有执行完毕,主线程或函数都会接着执行的。看个例子: import threading import time class MyThread(threading.Thread):??????def __init__(self,id):?????????????threading.Thread.__init__(self)?????????????self.id=id??????def run(self):?????????????x=0?????????????time.sleep(20)?????????????print self.id????????????? def func():??????t.start()??????for i in range(5):?????????????print i????????????? t=MyThread(2) func()01234 2可以看到,虽然在func里面线程已经运行,但是函数并没有等线程运行结束在执行,而是先把func执行完毕,打印0到4,然后等sleep(20),20秒结束后,这个MyThread(2),传进去的2才打印出。 def func():??????t.start()??????t.join()??????for i in range(5):?????????????print i????????????? t=MyThread(3) func()301234?而这个呢,是当t.start()运行开始计时,20秒后,打印出id是3,然后func才接着运行,打印出0到4.?2. setDaemon()方法这个方法基本和join是相反的。当我们在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程就分兵两路,分别运行,那么当主线程完成想退出时,会检验子线程是否完成。如果子线程未完成,则主线程会等待子线程完成后再退出。但是有时候我们需要的是,只要主线程完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以用setDaemon方法啦,下面的例子就是设置子线程随主线程的结束而结束:import threadingimport time?class myThread(threading.Thread):????def __init__(self,threadname):????????threading.Thread.__init__(self,name=threadname)????def run(self):????????time.sleep(5)?????????print self.getName()?def fun1():????t1.start()????print fun1 done?def fun2():????t2.start()????print fun2 done?t1=myThread(t1)t2=myThread(t2)t2.setDaemon(True)fun1()fun2()??上面这个例子,按照我们设想的输出时:fun1 donefun2 done?t1但是实际上我们在交互模式,主线程只有在python退出时终止,所以结果t2也是被打印出来啦。3 .isAlive方法当线程创建以后,可以使用Thread对象的isAlive方法查看线程是否运行。 import threading import time class myThread(threading.Thread):???????def __init__(self,id):??????????????threading.Thread.__init__(self)??????????????self.id=id???????def run(self):??????????????time.sleep(5)??????????????print self.id?????????????? t=myThread(1) def func():???????t.start()???????print t.i
文档评论(0)