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 是一个布尔值,根据比较结果为真或假。任何帮助将不胜感激。

谢谢,

-标记

4

3 回答 3

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
于 2012-10-16T19:13:38.617 回答
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)
于 2012-10-16T19:07:17.530 回答
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,你必须明确使用aa,但它有效。

于 2012-10-16T19:24:50.957 回答