python time sleep多线程_python多线程技巧,用threading.Event()替代time.sleep()

假如人们遇到了如许的场景:线程1做一件时光较长的事变,等做完了,主步伐来测试其状况是没有是实的变动了。

通常比拟轻易念到的是:

1. 线程1里,用大轮回来模仿那个长时光的函数,好比for i in range(1, 10000)等等;

2. 主步伐里,aojian3.comhttp://aojian3.com/,用好比time.sleep(60)来等候,默许60秒应当已经够线程1往run了。

显然,雪花秀http://www.juneis.info/,如许做是没有严谨的,由于出措施确实节制线程1的时光,以是测试步伐能够会fail失。

佳的办理措施是用threading.Event的wait()和set()来准确节制线程。

睹代码如下:

线程1:Work

主线程:和踪测试is_done的状况。

#,vc hook---学习小结!/usr/bin/python# -*- coding: utf-8 -*-import threadingdef DoWork(work, callback): def Task(): print 'work begin...' work() print 'work done!' print 'callback begin...' callback() print 'callback done!' t = threading.Thread(target=Task) t.start()def TestWorkAndDone(): is_started = threading.Event() can_done = threading.Event() is_done = threading.Event() def Work(): """it's not a good idea to use huge for loop here to kill time,藏族女歌手央金兰泽天籁之作 遇见你是我的缘, because the start and end time are not under the control. """ print '1' is_started.set() print '2' # block here until can_done.set() is called. can_done.wait(timeout=60) # .await() in Java print '7' DoWork(work=Work,依波表http://www.freekti8t.info/, callback=lambda:is_done.set()) print '3' # block here until is_started.set() is called. is_started.wait(timeout=60) print '4' if is_started.isSet(): print 'SUCCESS: Work started' if is_done.isSet(): print 'FAILD: Work hasnot done' print '5' can_done.set() # Work() is unblock. print '6' # block here until callback() is called. # no need to use time.sleep(60) here. is_done.wait(timeout=60) if is_done.isSet(): print 'SUCCESS: Work done'# mainTestWorkAndDone()

运转次序睹print的编号

以上代码,细细领会吧,呵呵。新的担心息争决之讲

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值