python - 线程中的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")
解决方案
首先,这几行有一个问题:
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()
推荐阅读
- python - 如何与 matplotlib 同步绘图?
- swift - 启用应用程序组时使用`defaults` CLI:“域不存在”
- c# - .net core 3.卸载程序集
- image - 图像顶部带有文本的堆栈列表
- c - 在 c 中填充具有以下结构的矩阵
- c# - 当前上下文中不存在名称 Request
- python - Pandas GroupBy 和 Sum python
- ios - 如何从“for循环”返回字符串?Objective-C iOS
- java - 如何从 AlarmManager BroadcastReceiver 调用 MainActivity 方法?
- c# - 在调试窗口中看不到任务正在运行 - Visual Studio 2019