class MyClass():
def __init__(self):
...
def start(self):
colorThread = threading.Thread(target = self.colorIndicator())
colorThread.start()
while True:
print ('something')
...
...
我在print
内也有一个colorIndicator()
声明。该声明正在印刷。但start()
方法的while循环中的print语句不会显示在屏幕上。
colorIndicator()
也有无限循环。它从互联网获取一些数据并更新计数器。此计数器在__init__
内作为self
变量初始化,我在其他方法中使用该变量。
我不明白为什么print
内部没有被执行。
colorIndicator功能:
def colorIndicator(self):
print ('something else')
...
while (True):
...
print ('here')
time.sleep(25)
我得到的输出如下:
something else
here
here
之后我停了下来。因此,colorIndicator显然完全运行。
我在python解释器中(在终端中)使用import
调用脚本。然后我实例化MyClass
并调用start
函数。
答案 0 :(得分:2)
你实际上并没有在一个线程中运行colorIndicator
,因为你在主线程中调用它,而不是将方法本身(未调用)作为线程{{1}传递}。变化:
target
为:
colorThread = threading.Thread(target=self.colorIndicator())
# ^^ Agh! Call parens!
基本上,您的问题是在构建 # Remove parens so you pass the method, without calling it
colorThread = threading.Thread(target=self.colorIndicator)
# ^ Note: No call parens
之前,它正在尝试运行Thread
以完成,因此它可以将其返回值用作colorIndicator
,这是错误的多种方式(方法永远不会返回,即使它返回,也不会返回适合用作target
的callable。)