如何在python里面for循环中放了一个定时函数,当定时函数运行时跳过本次循环,执行那个循环

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python里面for循环中放了一个定时函数,当定时函数运行时跳过本次循环,执行那个循环相关的知识,希望对你有一定的参考价值。

# 我的构想程序效果
for Img in ImgArray:
timer = threading.Timer(1, imgDownloadOvertime(path)) # 定时器函数,当等待超过1秒钟后执行,并跳出本次循环,终止下面的所有代码执行
timer.start() #开启定时器
... # 我的其他程序代码
timer.cancel() # 如果能在一面内完成 ... 的程序就关掉定时器
... # 我的其他程序代码

# 现在的问题是定时器没有办法跳出本次循环,请大神有没有什么办法解决

参考技术A 加一个变量来控制外层循环试试 参考技术B sleap睡儿秒执行。
外设flag标识位,平控制是否执行。
参考技术C def fun_timer():
print('Hello Timer!')

for i in range(1,5):
a = 0

timer = threading.Timer(13, fun_timer()) #
timer.cancel()
timer.start()
print(str(i))
if a==0:
for j in range(1,5):
time.sleep(3)
print('Hello')
if fun_timer()!=False:
print('cancel')
continue
我是小白 这个没报错
参考技术D 哥们儿,同问,你这个问题解决了么?

NSProgressIndicator For 循环的进度?

【中文标题】NSProgressIndicator For 循环的进度?【英文标题】:NSProgressIndicator progress with For loops? 【发布时间】:2011-08-22 00:46:16 【问题描述】:

我的应用程序用一堆 For 循环做了很多工作。它计算了大量的字符串,并且可能需要整整一分钟才能完成。

所以我在我的应用中放置了一个 NSProgressIndicator。

在循环中,我使用了 NSProgressIndicator 的“incrementBy”函数。但是,我没有看到实际的条形图填满。

我怀疑这是因为循环占用了所有可能的能量,因此 NSProgressIndicator 没有更新(以图形方式)。

那我该怎么做呢?

【问题讨论】:

【参考方案1】:

您的for 循环是在主线程还是后台线程中运行?如果它们在主线程上运行,则 GUI 将永远没有机会更新自身以反映进度更改,因为这只会在 runloop 结束时发生,即在您的函数完成运行之后。

如果您的for 循环在后台运行,那您就是淘气!您不应该从除主线程之外的任何地方更新 GUI。如果您的目标是现代系统,则可以使用 GCD 轻松解决此问题。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) 
    for (int i = 0; i < n; i++) 
        // do stuff
        dispatch_async(dispatch_get_main_queue(), ^(void) 
            // do your ui update here
        );
    
);

或者,您可以重写 for 循环以进一步利用 GCD 并使用 dispatch_apply。上面的等价物是:

dispatch_apply(n, DISPATCH_QUEUE_PRIORITY_DEFAULT, ^(size_t i) 
    // for loop stuff here
    dispatch_async(dispatch_get_main_queue(), ^(void) 
        // do your ui update here
    );
);

请注意,使用 dispatch_apply 意味着循环的每个“迭代”可能彼此同时运行,因此如果您的 for 循环需要以串行方式运行。

【讨论】:

以上是关于如何在python里面for循环中放了一个定时函数,当定时函数运行时跳过本次循环,执行那个循环的主要内容,如果未能解决你的问题,请参考以下文章

对于python中的循环效率

ICanHaz.js - 可以在模板中放置一个 while 循环吗?

ORACLE 11G在存储过程里面遍历游标, 调用job任务定时运行

js定时器 settimeout和其他代码是同步执行还是异步执行

闭包,定时器,循环

NSProgressIndicator For 循环的进度?