2

10 分間にわたって 2 つの値を比較しようとしています。10 分間 A < B の場合は、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 はどちらも int で、C は bool で、比較に応じて true または false になります。どんな助けでも大歓迎です。

ありがとう、

-マーク

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

次のように、プロパティベースのアプローチを使用できます。

#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

これは少しハックで、aa を明示的に使用する必要がありますが、機能します。

于 2012-10-16T19:24:50.957 に答える
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 に答える