我到处都看过了,好像我写的线程应该正常工作。我已经检查了许多其他有关它的线程和教程。我似乎无法在线程中运行无限循环。尽管我做了什么,但只有第一个线程可以工作/打印。
这是方法的代码。
import threading
def thread1():
while True:
print("abc")
def thread2():
while True:
print ("123")
if __name__ == "__main__":
t1 = threading.Thread(target=thread1())
t2 = threading.Thread(target=thread2())
t1.start
t2.start
t1.join
t2.join
在用target=
调用函数的最后删除假名不会打印任何内容,因此我将其保留在其中。
这是类/对象的版本。
from threading import Thread
class Thread1(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
self.start
def run():
while True:
print ("abc")
class Thread2(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
self.start
def run():
while True:
print ("123")
Thread1.run()
Thread2.run()
两者都从未尝试打印123
,我也不知道为什么。看起来无限循环不应该成为问题,因为它们是并行运行的。我尝试了time.sleep
(可能是GIL停止了它的idk),所以线程2可以在线程1空闲时运行。没用
答案 0 :(得分:0)
第一个示例:
if __name__ == "__main__":
t1 = threading.Thread(target=thread1)
t2 = threading.Thread(target=thread2)
t1.start()
t2.start()
t1.join()
t2.join()
将函数而不是调用函数的结果作为threading.Thread
传递给target
。
对于本节示例。请勿致电run
。致电start
。创建实例后。
from threading import Thread
class Thread1(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
def run():
while True:
print ("abc")
class Thread2(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
def run():
while True:
print ("123")
Thread1().start()
Thread2().start()
答案 1 :(得分:0)
您的括号在第一个版本中的位置错误。
按照目前的编写,您正在创建thread1
时传递调用t1
的结果;由于该调用永远不会返回,因此您实际上不会创建线程。因此,您需要删除那些括号。
但是您不要在尝试调用start
和join
方法的地方加上括号,因此即使您没有调用这些线程也从未真正启动过创建线程时,请不要使用多余的括号。