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