提问人:Bao Tran 提问时间:6/25/2018 最后编辑:Bao Tran 更新时间:6/26/2018 访问量:3535
在 python 中更改 while 循环中标志值的可能方法?
Possible ways to change flag values inside a while loop in python?
问:
所以我的问题是这样的:我正在运行一个 while 循环,每次都会执行 Function1,Function2 和 Function3 只有在它们各自的标志设置为 True 时才会执行,我希望能够在循环运行时更改这些标志。
while brkFlag == False:
Function1.run()
if flag2 == True:
Function2.run()
else:
pass
if flag3 == True:
Function3.run()
else:
pass
if someConditions == True:
brkFlag = True
目前,我想在循环运行时使用 GUI 更改这些标志,并尝试使用 tkinter 的按钮和复选框来执行此操作,但到目前为止没有运气。
我也不能使用多线程或多处理,因为它们会大大减慢循环的速度(这已经是勉强可以接受的,因为每个函数中都有很多计算,我需要以实时方式显示结果)。
编辑:所以似乎除了做多线程/处理之外别无他法。
答:
0赞
Serge Ballesta
6/25/2018
#1
一个简单的方法是传递一个包含标志的可变容器,例如列表:
flags = [flag2, flag3, someConditions ]
while brkFlag == False:
Function1.run(flags)
if flags[0] == True:
Function2.run(flags)
else:
pass
if flags[1] == True:
Function3.run(flags)
else:
pass
if someConditions == True: # or if flags[2] == True:
brkFlag = True
在被调用方中,您或多或少地实现了:
...
def run(flags):
...
flags[0] = True # set flag2
...
评论
0赞
Bao Tran
6/25/2018
嗯,那么当我的 while 循环运行时,我该如何更改该容器的值?
0赞
Bao Tran
6/25/2018
没有人...我的意思是,有没有办法在不使用单独的线程/进程中断 while 循环的情况下更改这些标志?该循环实际上从摄像机中获取实时图像帧并对其进行处理,因此我真的很希望能够在不中断实时视频源的情况下更改这些标志。我不能使用多线程/处理,因为如果我的程序变得比现在慢,它将毫无价值。
1赞
Serge Ballesta
6/25/2018
@BaoTran:看来我错过了你的意思......不幸的是,恐怕我真的无法理解你的问题在哪里。从 GUI 更改变量,通常是 GUI 的用途。常见的用途是 GUI 的一个线程,最终是一个或多个工作线程,以保持 GUI 在长时间操作期间的响应。唯一的约束是后台线程不应作用于 GUI。
0赞
Bao Tran
6/26/2018
是的,对不起,似乎没有其他方法可以使用多线程。实际上,我之前尝试过多线程,但相机的帧速率会大大下降。不确定我是否做错了什么,或者多线程确实确实会减慢 python 程序的速度。谢谢你对我的耐心。
上一个:在循环中并发运行函数
评论
else