Python 多线程基础知识

Python Multi-Threading Basics

我无法理解如何让简单的多线程在 python 中工作。这是我在 python 中编写的一个简单脚本,它应该同时写入两个不同的文件:

from threading import Thread
import time

def function(file):
    with open(file, 'w') as f:
        i = 0
        while i < 10:
            print(file + ' printing ' + str(i))
            f.write(str(i) + '\n')
            time.sleep(0.4)
            i += 1

if __name__ == '__main__':
    thr1 = Thread(target=function('thr1.txt'))
    thr2 = Thread(target=function('thr2.txt'))

    thr1.start()
    thr2.start()

此代码的输出 运行 表明这些函数不是并行执行的,而是一个接一个地执行:

thr1.txt printing 0
thr1.txt printing 1
thr1.txt printing 2
thr1.txt printing 3
thr1.txt printing 4
thr1.txt printing 5
thr1.txt printing 6
thr1.txt printing 7
thr1.txt printing 8
thr1.txt printing 9
thr2.txt printing 0
thr2.txt printing 1
thr2.txt printing 2
thr2.txt printing 3
thr2.txt printing 4
thr2.txt printing 5
thr2.txt printing 6
thr2.txt printing 7
thr2.txt printing 8
thr2.txt printing 9

Process finished with exit code 0

我是否误解了 python 中多线程函数的基础知识,因为从我看过的资源来看,这似乎是它完成的方式?

这里:

    thr1 = Thread(target=function('thr1.txt'))
    thr2 = Thread(target=function('thr2.txt'))

function 的调用被急切地评估。基本上,您将调用 function 的结果作为 target 传递给 Thread。所以你的函数甚至在创建线程之前就已经执行了。

您需要做的是传递要调用的函数的名称及其参数 - 而无需调用该函数。

thr1 = Thread(target=function, args=('thr1.txt',))
thr2 = Thread(target=function, args=('thr2.txt',))

这会产生预期的交错输出:

thr1.txt printing 0
thr2.txt printing 0
thr2.txt printing 1
thr1.txt printing 1
thr2.txt printing 2thr1.txt printing 2

thr2.txt printing 3thr1.txt printing 3

thr2.txt printing 4
thr1.txt printing 4
thr1.txt printing 5
thr2.txt printing 5
thr2.txt printing 6
thr1.txt printing 6
thr2.txt printing 7
thr1.txt printing 7
thr1.txt printing 8thr2.txt printing 8

thr2.txt printing 9thr1.txt printing 9