多线程:将线程定义为 class
Multithreading : defining thread as a class
我编写了以下程序来将线程实现为 class。
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。事实上,根本没有输出。代码对我来说看起来不错。我什至尝试添加睡眠语句,但无济于事。可能出了什么问题?
你无处打电话 prints()
;你只是定义它。如果您改为调用它 run
,线程 class 将调用它。您也可以保留名称,但定义一个单独的 run
调用它的方法。
您永远不要调用 prints
函数,您应该在覆盖 Thread
class:
的 run
函数中调用 prints
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
我编写了以下程序来将线程实现为 class。
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。事实上,根本没有输出。代码对我来说看起来不错。我什至尝试添加睡眠语句,但无济于事。可能出了什么问题?
你无处打电话 prints()
;你只是定义它。如果您改为调用它 run
,线程 class 将调用它。您也可以保留名称,但定义一个单独的 run
调用它的方法。
您永远不要调用 prints
函数,您应该在覆盖 Thread
class:
run
函数中调用 prints
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