我对线程的理解
My understanding of threading
我已经一年多没有编程了,如果这是一个愚蠢的问题,我很抱歉。
我在这个网站上查找了很多线程示例,但我得到的结果似乎与其他人不同。
根据我对线程的理解,使用这个简单的代码,应该是一起打印 YO 和 LO,比如
哟
罗
哟
罗
但我只是得到
哟
哟
哟
...
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()
您正在调用该函数,而不是将其作为线程的目标。
t2 = Thread(target=printLo)
t = Thread(target=printYo)
有两个问题,首先你应该将线程函数传递给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 的打印顺序 - 起初它们可能会交替出现,但最终会出现一些一个线程可能会在另一个线程打印之前打印两次。
我已经一年多没有编程了,如果这是一个愚蠢的问题,我很抱歉。 我在这个网站上查找了很多线程示例,但我得到的结果似乎与其他人不同。
根据我对线程的理解,使用这个简单的代码,应该是一起打印 YO 和 LO,比如
哟 罗 哟 罗
但我只是得到
哟 哟 哟 ...
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()
您正在调用该函数,而不是将其作为线程的目标。
t2 = Thread(target=printLo)
t = Thread(target=printYo)
有两个问题,首先你应该将线程函数传递给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 的打印顺序 - 起初它们可能会交替出现,但最终会出现一些一个线程可能会在另一个线程打印之前打印两次。