我正在使用清漆4中的清漆API。它生成日志条目的方式是通过Dispatch反对它,并传入回调。简单版本:
class vlog(object):
def __init__(self):
self.body = []
def callback(self, vap, cbd, priv):
self.body.append(cbd)
def main(self):
self.vlog = varnishapi.VarnishLog(sopath="libvarnishapi.so")
while True:
ret = self.vlog.Dispatch(self.callback)
if ret == 0:
time.sleep(0.1)
我需要在self.callback中做更多的事情来正确地聚合数据,但无论如何。
我的真实问题是:如何将上述类转换为生成器?我的理想用法是这样的:
vlog_inst = vlog()
for log_aggregate in vlog_inst:
pass
简单地说“收益率”'回调函数中的语句永远不会触发迭代。 (令我惊讶的是,添加yield语句也会导致我的所有打印语句也没有产生任何输出......我显然错过了一些东西。)
答案 0 :(得分:0)
您希望您的课程可迭代。生成器是一种实现可迭代的方法,但不需要使类可迭代。
您可以实施__iter__
方法;如果你使它成为生成器函数,你不需要任何其他东西:
def __iter__(self):
while True:
yield self.vlog.Dispatch(self.callback)