我无法弄清楚如何做到这一点。Python时间问题
我想在设定的时间内运行python脚本。并且,我每需要1/10的时间来运行一些东西。问题是这一步可能需要花费任何时间来完成。我无法超越一开始就设定的最长持续时间。
实施例: 持续时间20小时
间隔= 20/10 = 2小时(如果它需要这可以改变)
每隔两个小时运行功能()。函数()需要0-60分钟才能完成。然后它睡觉。我怎样才能使它继续运行9次,但不超过最大持续时间?
我无法弄清楚如何做到这一点。Python时间问题
我想在设定的时间内运行python脚本。并且,我每需要1/10的时间来运行一些东西。问题是这一步可能需要花费任何时间来完成。我无法超越一开始就设定的最长持续时间。
实施例: 持续时间20小时
间隔= 20/10 = 2小时(如果它需要这可以改变)
每隔两个小时运行功能()。函数()需要0-60分钟才能完成。然后它睡觉。我怎样才能使它继续运行9次,但不超过最大持续时间?
也许你可以使用信号。这个想法是你设置一个信号处理程序来在SIGALRM生成时被调用。在信号处理程序中,您可以拨打function
。然后,您重置闹钟并重新执行。这是给你一个想法的一个基本例子。
import signal
...
signal.signal(signal.SIGALRM, alarm_handler) # set the signal handler
signal.alarm(interval) # set the alarm
...
def alarm_handler(signum, stack):
# call function
function()
一旦警报响起时,你叫function()
然后重置报警:
signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(interval)
或者您可以使用signal.setitimer
自动配置区间报警,但我不知道如何将工作大时间片(用于微型马戏)。
注意:必须从主线程调用signal.alarm()。
分叉一个子过程来完成实际的工作;如果作业超过了运行时间限制,则将其终止。
为什么不简单地使用全局定时器?例如,在最初开始时只需在需要时检查它的值。 – 2011-06-13 19:56:31
您可以查看'signal.alarm'来使用信号。这样SIGALRM就会在给定的时间间隔内生成,并且您可以设置您的信号处理程序来调用'function'。另外检查'signal.setitimer'。 – 2011-06-13 19:56:40