我对线程的理解

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 的打印顺序 - 起初它们可能会交替出现,但最终会出现一些一个线程可能会在另一个线程打印之前打印两次。