有条件的持续时间

时间:2012-10-16 18:38:01

标签: python datetime timedelta

我希望在10分钟的持续时间内比较两个值。如果A< B持续10分钟然后设置C否则什么都不做。

from datetime import datetime
curr = datetime.now()
print (curr)
Curr_Plus_Ten = datetime.now() + timedelta(minutes=10)
print (Curr_Plus_Ten)

上述输出仅为2012-10-16 11:37:55.224999和2012-10-16 11:47:55.224999

我认为我会使用当前时间和当前时间+ 10分钟来实现正确的比较持续时间,但是如果将时间与If或a While一起使用以进行实际比较则会丢失。 A和B都是整数,C是bool,根据比较,它可以是真或假。任何帮助将不胜感激。

谢谢,

-Mark

3 个答案:

答案 0 :(得分:1)

也许最简单的解决方案是使用睡眠间隔阻止while循环。请注意,这只有在您的A值实际可以在两者之间发生变化时才会起作用(例如,如果它是SQL查询的结果或类似的话)。

import datetime
import time

def getA():
  import random
  return random.random()

def getB():
  return .01

checkTime = datetime.timedelta(minutes=10)
checkIntervalInSecs = .5

c = False
timeToStop = datetime.datetime.now() + checkTime
while(datetime.datetime.now() < timeToStop):
  if getA() < getB():
    c = True
    break
  time.sleep(checkIntervalInSecs)

print c

答案 1 :(得分:0)

我相信这就是您正在寻找的东西(或类似的东西),这应该能够帮助您解决当前遇到的问题。

import threading,random,time
results=[]
a=2
b=3
def check_values():
    if a<b:
        results.append("a<b")
    else:
        results.append("a>=b")
    print "Results-> "+",".join(str(x) for x in results)
check=Timer(30.0,check_values)
check.start()
try:
    while True:
        case=random.randrange(0,100)
        if case>=50:
            a+=1
        else:
            b+=1
        time.sleep(2)
except KeyboardInterrupt:
    check.stop()
    print "Final Results-> "+",".join(str(x) for x in results)
    exit(0)

答案 2 :(得分:0)

您可以使用基于属性的方法,如下所示:

#a.py
import sys
class Test(object):
    def __init__(self):
        self._a = 0

    @property
    def a(self):
        return self._a

    @a.setter
    def a(self, value):
        self._a = value
        print "New 'a' is: %s" % value
        ######## YOU CAN TEST HERE IF A > B OR WHATEVER ########

sys.modules[__name__] = Test()

然后:

>>>import a
>>>a.a
0
>>>a.a = 10
New 'a' is: 10
>>>a.a
10
>>>a.a = 100
New 'a' is: 100

有点hackish,你必须明确使用a.a,但它有效。