多线程:将线程定义为类

时间:2016-02-21 13:14:55

标签: python multithreading python-multithreading

我编写了以下程序来实现线程作为一个类。

import threading
import datetime
import time

class MyThread(threading.Thread):
    def __init__(self,i):
        threading.Thread.__init__(self)
        self.i=i

    def prints(self):
        while(self.i>0):
            print "i="+str(self.i)+" "+str(datetime.datetime.now().time())+"\n"
            self.i=self.i-1
            time.sleep(1)
        return

t1=MyThread(3)
t2=MyThread(5)
time.sleep(1)
t1.start()
t2.start()
#t1.join()
#t2.join()

即使它执行时没有抛出任何错误,我也看不到我期望的输出,即在一个线程中打印i = 3到1,在另一个线程中打印i = 5到1。实际上,根本没有输出。代码看起来很好。我甚至尝试添加睡眠声明,但无济于事。什么可能出错?

2 个答案:

答案 0 :(得分:3)

您永远不会调用prints函数,您应该调用run函数中的Thread覆盖class MyThread(threading.Thread): def __init__(self,i): threading.Thread.__init__(self) self.i=i def run(self): self.prints() 类:

datetime

并且您还应导入i=3 16:55:36.903809 i=5 16:55:36.904809 i=2 16:55:37.966870 i=4 16:55:37.967870 i=1 16:55:38.972927 i=3 16:55:38.973927 i=2 16:55:39.979985 i=1 16:55:40.984042 ,这是输出:

{{1}}

答案 1 :(得分:2)

调用 prints()无处可去;你只是定义它。如果你改为调用run,则线程类会调用它。您也可以保留名称,但定义一个单独的run方法来调用它。