我很难理解如何让简单的多线程在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中多线程函数的基本知识,因为从我所看到的资源来看,这似乎就是它的完成方式吗?
发布于 2021-06-14 04:56:10
在此:
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 9https://stackoverflow.com/questions/67964945
复制相似问题