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
我无法理解如何让简单的多线程在 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