Python线程 - 有什么区别?

时间:2015-04-22 18:11:46

标签: python multithreading

有人可以解释为什么这段代码什么都不打印:

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()

它打印'测试'?这对我来说是一个非常令人惊讶的结果。

2 个答案:

答案 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')

您将体验到您期望发生的事情,因为主要过程正在等待线程完成。