条件测试/回调机制

时间:2012-05-23 20:01:43

标签: python callback conditional-statements

我需要一个简单的类或函数来进行测试(可调用的对象返回TrueFalse)以及在测试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.

感谢任何帮助。 (请不要因为我还是初学者而太复杂了)

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

你认为你可能需要一个单独的线程来检查后台条件是正确的。在这个单独的线程中,您还必须决定要检查的频率(还有其他方法可以执行此操作,但这种方式需要对您显示的代码进行最少的更改)。

我的回答只是使用了一个函数,但如果您愿意,可以轻松使用类:

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)