python 多线程的问题
- Python code
import threadingimport timeimport sysclass MyThread(threading.Thread): def __init__(self, num, interval): threading.Thread.__init__(self) self.thread_num = num self.interval = interval self.thread_stop = False def run(self): #Overwrite run() method, put what you want the thread do here while not self.thread_stop: print 'Thread Object(%d), Time:%s\n' %(self.thread_num, time.ctime()) time.sleep(self.interval) def stop(self): self.thread_stop = Truedef main(): t1=MyThread(1,2) t2=MyThread(2,3) #t1.setDaemon(True) #t2.setDaemon(True) t1.start() t2.start() time.sleep(20) t1.stop() t2.stop() print "finish"if __name__ == '__main__': main()
setDaemon方法
在脚本运行的过程中有一个主线程,如果主线程又创建了一个子线程,那么当主线程退出时,会检验子线程是否完成。如果子线程未完成,则主线程会在等待子线程完成后退出。
我想问的是,这里说主线程退出时,子线程会继续。那么在我的代码里,主线程什么时候退出呢?上面的代码还是要等到两个进程都运行完了才会“finish”。有没有方法强行让主线程结束呢? 比如我加一个return,然后让子线程也都立即结束,代码该怎么改?
谢谢
[解决办法]
你这段代码,
time.sleep(20)
主线程暂停20s之后,继续执行:
t1.stop()
t2.stop()
,然后主线程print "finish"之后就结束了
子线程下一次得到时间片进入的时候,就time.sleep(self.interval)之后也结束了
[解决办法]
1,要么no daemon & join, 要么daemon.
2,你的代码严重问题,建议了解一下 Condition Objects, 可以保证安全共享访问变量以及挂起等待, 而不是你这样不加锁的修改与检查,轮询的检查。