有人可以解释为什么这段代码什么都不打印:
CustomerAddress
但如果我删除括号:
import threading
def threadCode1():
while True:
pass
def threadCode2():
while True:
pass
thread = threading.Thread(target=threadCode1())
thread2 = threading.Thread(target=threadCode2())
thread.start()
print('test')
thread2.start()
它打印'测试'?这对我来说是一个非常令人惊讶的结果。
答案 0 :(得分:5)
因为,当您首次使用线程调用评估该行时:
thread = threading.Thread(target=threadCode1())
该行的第一件事是执行threadCode1()
,这使得程序跳转到threadCode1
函数体,这是一个无限循环,执行将永远不会使它脱离函数并执行主程序中的下一行。
如果您将threadCode1
更改为:
def threadCode1():
while True:
print 'threadCode1'
你会注意到它如何无休止地循环打印threadCode1
。
答案 1 :(得分:2)
启动线程时,它们在单独的控制线程下运行,而不是程序。这意味着他们正在做自己的事情(永远循环),你的主要过程可以继续做他们想要的。如上所述,在第一个示例中附加parens实际上会调用主进程中的函数。如果您改为输入
thread = threading.Thread(target=threadCode1)
thread2 = threading.Thread(target=threadCode2)
thread.start()
thread.join()
print('test')
您将体验到您期望发生的事情,因为主要过程正在等待线程完成。