2012-10-16 40 views
2

我期待在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或While同时使用以进行实际比较方面存在一定损失。 A和B都是整数,而C是一个bool,根据比较结果可以是真或假。任何帮助将不胜感激。

感谢,

马克

+0

A和B变量或函数的返回值?如果他们是变数,你可以试着将它们隐藏在描述符后面并且超载'__set__',所以每当它们中的一个被设置时,你可以在需要时检查和设置C – lolopop

+0

问题是:“我有2个变量必须满足约束A

+0

我对python有点新,所以请告诉我。 'A'将是一个不断变化的变量,通过不同的数据源进入,'B'将是一个不变的比较对象。乔恩 - 是的,我想观察并比较两者,如果A Kram

回答

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 
+0

感谢汉斯,这似乎解决了我的问题。我即兴创作,这对我来说是最简单的理解。再次感谢。 – Kram

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) 
+0

这对我的Python技能来说太复杂了,但是我会把它分开,看看我能否理解它。感谢IT忍者我很感激。 – Kram

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,但它的作品。