如果函数花费的时间太长,则跳过循环?

时间:2016-04-21 07:13:11

标签: python numpy

我的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 

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

1 个答案:

答案 0 :(得分:2)

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

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

下面的例子说明了这个想法,每个块的工作量随机抽取,有时会完成,有时会超时:

using

实现此目的的另一种方法是在单独的线程中运行worker函数,并使用select oid.d_id, o_id, SUM(price) from OrdersInDelivery oid join ItemsInOrder iio using (o_id) Item i using (i_id) group by d_id, o_id having sum(price) = (select sum(iio2.price) from ItemsInOrder iio2 join Item i2 using (i_id) where iio2.d_id = iio.d_id group by iio2.o_id order by sum(iio2.price) desc limit 1 ); 允许调用者发出工作者函数应该提前终止的信号。

有些帖子(例如上面链接的帖子)建议使用信号,但不幸的是信号可能会导致额外的并发症,因此不推荐使用。