我不确定为什么这不起作用。线程一旦定义就开始,似乎不在实际线程中......也许我错过了一些东西。
import threading
import time
def endless_loop1():
while True:
print('EndlessLoop1:'+str(time.time()))
time.sleep(2)
def endless_loop2():
while True:
print('EndlessLoop2:'+str(time.time()))
time.sleep(1)
print('Here1')
t1 = threading.Thread(name='t1', target=endless_loop1(), daemon=True)
print('Here2')
t2 = threading.Thread(name='t2', target=endless_loop2(), daemon=True)
print('Here3')
t1.start()
print('Here4')
t2.start()
输出:
Here1
EndlessLoop1:1446675282.8
EndlessLoop1:1446675284.8
EndlessLoop1:1446675286.81
答案 0 :(得分:4)
您需要为target=
提供可调用对象。
target=endless_loop1()
您实际上正在调用 endless_loop1()
,因此它会立即在主线程中执行。你想要做的是:
target=endless_loop1
传递你的Thread
函数对象,以便它自己调用它。
此外,daemon
实际上并不是一个init参数,您需要在调用start
之前单独设置它:
t1 = threading.Thread(name='t1', target=endless_loop1)
t1.daemon = True