首页 > 解决方案 > 线程中的while循环

问题描述

我正在尝试在线程内使用 while 循环来进行更大的项目。为简单起见,我创建了一个更简单的示例来测试它,但它不起作用。

我的目标是控制主函数的线程,当变量go_thread_one切换为 False 时,线程应该结束。目前第二个线程没有被使用,只有第一个线程打印它的文本。

我该如何解决这个错误?

以下是我的代码的简化版本:

import time
from threading import Thread

go_thread_one = True


def first_thread():
    while go_thread_one:
        print('Thread 1')
        time.sleep(0.5)


def second_thread():
    print('Thread 2')


if __name__ == "__main__":
    t1 = Thread(target=first_thread())
    t2 = Thread(target=second_thread())

    t1.daemon = True
    t2.daemon = True

    t1.start()
    t2.start()
    time.sleep(2)

    go_thread_one = False

    print("end main Thread")

标签: pythonmultithreading

解决方案


首先,这几行有一个问题:

t1 = Thread(target=first_thread())
t2 = Thread(target=second_thread())

您应该将一个可调用对象传递给Thread,而是调用一个函数并传递其结果。所以你甚至不创建一个t1,而是进入first_thread函数并永远循环在那里。

要解决此问题,请将线程创建更改为:

t1 = Thread(target=first_thread)
t2 = Thread(target=second_thread)

接下来,

go_thread_one = False

不会产生预期的效果——time.sleep(2)即使没有这条线,主线程也会完成。

要处理它,您可以添加

t1.join()
t2.join()

推荐阅读