多线程如何在Python 3.4中工作?

时间:2016-06-07 20:52:42

标签: python multithreading python-multithreading

我正在玩多线程,但我似乎无法让它发挥作用。我看过其他问题,但没有人真正帮助我。到目前为止,这是我的代码:

import threading, time

def hello():
    for i in range(1,5):
        time.sleep(1)
        print("Hello")

def world():
    for i in range(1,5):
        time.sleep(1)
        print("World")

newthread = threading.Thread(hello())
newthread.daemon = True
newthread.start()
otherthread = threading.Thread(world())
otherthread.daemon = True
otherthread.start()
print("end")

我希望得到类似的东西:

Hello
World
Hello
World
Hello
World
Hello
World
end

但我得到了:

Hello
Hello
Hello
Hello
World
World
World
World
end

2 个答案:

答案 0 :(得分:2)

threading.Thread(hello())

您调用函数hello并将结果传递给Thread,因此它在线程对象存在之前执行。传递普通函数对象:

threading.Thread(target=hello)

现在Thread将负责执行该功能。

答案 1 :(得分:1)

你想要这样的东西:

import threading, time

def hello():
    for i in range(1,5):
        time.sleep(1)
        print("Hello")

def world():
    for i in range(1,5):
        time.sleep(1)
        print("World")

newthread = threading.Thread(target=hello)
newthread.start()
otherthread = threading.Thread(target=world)
otherthread.start()

# Just for clarity
newthread.join()
otherthread.join()

print("end")

连接告诉主线程在退出之前等待其他线程。如果您希望主线程退出而不等待设置demon=True并且不加入。输出可能会让你感到惊讶,它并不像你想象的那么干净。例如,我得到了这个输出:

HelloWorld

World
 Hello
World
 Hello
WorldHello