1

テストを取る単純なクラスまたは関数 (Trueまたはを返す呼び出し可能なオブジェクトFalse) と、テストが であるときに呼び出される関数が必要Trueです。おそらく、別のスレッドですべてを実行する可能性があります。このようなもの:

nums = []
t = TestClass(test=(lambda: len(nums) > 5),
              func=(lambda: sys.stdout.write('condition met'))

for n in range(10):
    nums.append(n)
    time.sleep(1) 

#after 6 loops, the message gets printed on screen.

どんな助けでも大歓迎です。(私はまだ初心者なので、複雑なことは何も言わないでください)

4

2 に答える 2

1

バックグラウンドで状態を確認するために別のスレッドが必要になるかもしれないと考えるのは正しいです。この別のスレッドでは、チェックする頻度も決定する必要があります (これを行う方法は他にもありますが、この方法では、表示したコードへの変更が最小限で済みます)。

私の答えは関数を使用するだけですが、必要に応じて代わりにクラスを簡単に使用できます。

from threading import Thread
import time
import sys    

def myfn(test, callback):

    while not test():  # check if the first function passed in evaluates to True
        time.sleep(.001)  # we need to wait to give the other thread time to run.
    callback() # test() is True, so call callback.

nums = []

t = Thread(target=myfn, args=(lambda: len(nums) > 5, 
           lambda: sys.stdout.write('condition met')))
t.start() # start the thread to monitor for nums length changing

for n in range(10):
    nums.append(n)
    print nums  # just to show you the progress
    time.sleep(1) 
于 2012-05-23T21:13:33.500 に答える
0

あなたが何を求めているのか完全にはわかりませんが、これはあなたが始めるのに役立つと思います.

def test_something(condition, action, *args, **kwargs):
  if condition():
    action(*args, **kwargs)

def print_success():
  print 'Success'

def test_one():
  return True

test_something(test_one, print_success)
于 2012-05-23T20:59:52.430 に答える