如果这是一个愚蠢的问题,我现在已经有一年多的编程了。 我在这个网站上查找了很多关于线程的例子,但我似乎对其他人有了不同的结果。
根据我对线程的理解,使用这个简单的代码,应该将YO和LO打印在一起,比如
YO LO YO LO
但我只是得到了
YO YO YO ...
from threading import Thread
import time
def printYo():
while(3>1):
print ("YO")
time.sleep(1)
def printLo():
while(3>1):
print ("LO")
time.sleep(1)
t2 = Thread(target=printLo())
t = Thread(target=printYo())
t2.start()
t.start()
答案 0 :(得分:1)
您正在调用该函数,而不是仅仅将其作为您的线程的目标。
t2 = Thread(target=printLo)
t = Thread(target=printYo)
答案 1 :(得分:0)
有两个问题,首先你应该将线程函数传递给Thread
构造函数(即Thread(target=printLo)
)。当线程启动时,它将在一个单独的线程中调用该函数。
其次,您可能(可能)希望保持主线程运行,这可以通过使用空闲循环来完成。如果不这样做,您将无法使用^ C停止它,但您仍然必须处理该过程的终止。
完整的代码将是:
from threading import Thread
import time
def printYo():
while(3>1):
print ("YO")
time.sleep(1)
def printLo():
while(3>1):
print ("LO")
time.sleep(1)
t2 = Thread(target=printLo)
t = Thread(target=printYo)
t2.start()
t.start()
try:
while True:
time.sleep(1)
except:
os._exit(0)
一个小小的注意事项是打印件会在不同的行上打印输出,一个重要的注意事项是,无法保证YO和LO的打印顺序 - 首先它们可能会交替,但最终会有一些线程可能会在另一个打印之前打印两次。