我对线程的理解

时间:2015-07-23 13:26:44

标签: python python-multithreading

如果这是一个愚蠢的问题,我现在已经有一年多的编程了。 我在这个网站上查找了很多关于线程的例子,但我似乎对其他人有了不同的结果。

根据我对线程的理解,使用这个简单的代码,应该将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()

2 个答案:

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