Python 内联回调函数中的回调
假设我有这样一个函数:Python 内联回调函数中的回调,python,callback,twisted,yield,Python,Callback,Twisted,Yield,假设我有这样一个函数: def display(this, that): print this, that 还有一节课: class Runner(object): def __init__(self, callback): self.callback = callback self.loop = twisted.internet.task.LoopingCall(repeat) self.loop.start(0) @
def display(this, that):
print this, that
还有一节课:
class Runner(object):
def __init__(self, callback):
self.callback = callback
self.loop = twisted.internet.task.LoopingCall(repeat)
self.loop.start(0)
@defer.inlineCallbacks
def repeat(self):
this = yield do_this()
that = yield do_that()
if this and that:
# now I want to call the callback function
yield self.callback(this, that) # makes sense?
runner = Runner(display)
reactor.run()
基本上,我想做的是创建一个Runner类,它将执行一些特定的任务,每次得到结果时,它都会调用给定的回调函数。我想创建一个只做一件事的泛型类,而不是创建一个做特定事情的新函数。例如:
class TwitterReader(object):
def __init__(self, callback):
...
...
@defer.inlineCallbacks
def get_messages(self):
...
...
yield callback(messages)
class MessageFilter(object):
def __init__(self):
self.bad_messages = open('bad_messages.txt', 'w')
self.twitter = TwitterReader(self.message_received)
def message_received(messages):
for message in messages:
for bad_word in BAD_WORDS:
if bad_word in message:
self.bad_messages.write(message)
break
我是新来的。所以,我不确定这样做是否正确。是吗
谢谢您的问题是
回调
内部的重复
应该是self.callback
除此之外,您的示例应该完全按照编写的那样工作。如果它返回一个延迟,并且您希望在退出repeat
函数之前等待结果,您只需要产生self.callback
。在您的示例中,回调函数是一个普通函数(它实际上返回None
),因此让步没有任何好处-但是允许它产生非延迟值,因此不会造成任何伤害。从:
没有延期的事情也可能会被放弃,你的发电机
将使用发送回的相同对象恢复。这意味着收益
执行大致相当于maybeDeferred的操作
如果您的回调确实返回了延迟的函数(例如,如果它也是一个
inlineCallbacks
修饰函数),那么将暂停执行repeat
,直到延迟完成。这在您的应用程序中可能是可取的,也可能是不可取的。好的,我已经解决了,谢谢。但我的问题是关于设计。不确定是对还是错。@Johnsyweb好的,我添加了一些评论