首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python多线程基础

Python多线程基础
EN

Stack Overflow用户
提问于 2021-06-14 04:50:49
回答 1查看 72关注 0票数 0

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

代码语言:javascript
复制
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()

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

代码语言:javascript
复制
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中多线程函数的基本知识,因为从我所看到的资源来看,这似乎就是它的完成方式吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-14 04:56:10

在此:

代码语言:javascript
复制
    thr1 = Thread(target=function('thr1.txt'))
    thr2 = Thread(target=function('thr2.txt'))

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

您需要做的是传递要调用的函数的名称&它的参数-而不调用该函数。

代码语言:javascript
复制
thr1 = Thread(target=function, args=('thr1.txt',))
thr2 = Thread(target=function, args=('thr2.txt',))

这就产生了预期的交错产出:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67964945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档