如果一个函数花了太长时间,跳过循环?

如果一个函数花了太长时间,跳过循环?,第1张

概述我有一个 python代码需要太长时间,我想停止并跳过执行此功能,如果它需要超过几秒钟. 例如: – 我想要的功能是 batch_xs, batch_ys = train_loadbatch_from_lists(batch_size) 在某些情况下,此函数调用时间过长,并希望取消它. 我正在寻找这样的东西 if time for batch_xs, batch_ys = train_loadba 我有一个 python代码需要太长时间,我想停止并跳过执行此功能,如果它需要超过几秒钟.

例如: –

我想要的功能是

batch_xs,batch_ys = train_loadbatch_from_Lists(batch_size)

在某些情况下,此函数调用时间过长,并希望取消它.

我正在寻找这样的东西

if time for batch_xs,batch_ys = train_loadbatch_from_Lists(batch_size) > 20 seconds:    then skip

参考this post.

我想知道如果发生超时,如何再次调用该函数.

例如: –

@timeout(15)def abcd(hello):#some def

如果它穿过计时器,我想再次调用该函数.

解决方法 在同一个线程中调用函数时,通常在完成之前不会返回.您调用的功能必须首先设计为可中断.有许多方法可以实现这一点,具有不同程度的复杂性和通用性.

可能最简单的方法是将时间限制传递给您的函数,并以小块的形式处理工作.处理完每个块后,检查经过的时间是否超过超时,如果超过,则提前保释.

下面的例子说明了这个想法,每个块的工作花费了一个随机的时间,有时会完成,有时会超时:

import timeimport randomimport datetimeclass TimeoutException(Exception):    def __init__(self,*args,**kwargs):        Exception.__init__(self,**kwargs)def busy_work():    # Pretend to do something useful    time.sleep(random.uniform(0.3,0.6))def train_loadbatch_from_Lists(batch_size,timeout_sec):    time_start = datetime.datetime.Now()    batch_xs = []    batch_ys = []    for i in range(0,batch_size+1):        busy_work()        batch_xs.append(i)        batch_ys.append(i)        time_elapsed = datetime.datetime.Now() - time_start        print 'Elapsed:',time_elapsed        if time_elapsed > timeout_sec:            raise TimeoutException()    return batch_xs,batch_ysdef main():    timeout_sec = datetime.timedelta(seconds=5)    batch_size = 10    try:        print 'Processing batch'        batch_xs,batch_ys = train_loadbatch_from_Lists(batch_size,timeout_sec)        print 'Completed successfully'        print batch_xs,batch_ys    except TimeoutException,e:        print 'Timeout after processing N records'if __name__ == '__main__':    main()

实现此目的的另一种方法是在单独的线程中运行worker函数,并使用Event允许调用者发出工作者函数应该提前终止的信号.

一些帖子(例如上面链接的帖子)建议使用信号,但不幸的是信号会导致额外的并发症,因此不建议这样做.

总结

以上是内存溢出为你收集整理的如果一个函数花了太长时间,跳过循环?全部内容,希望文章能够帮你解决如果一个函数花了太长时间,跳过循环?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存