0
我正在使用协程管道进行事件驱动的数据管道。到目前为止,一切都很顺利。我想尝试批量处理一些输入,但需要一种方法来确保在上游生产者为空时处理最终批次。在下面的设计示例中,一旦完成produce_data_from
,这将成为print(res)
在print_data_cp
中的一种方式。一个更直接的模拟将是每次打印并重置res
其长度== 3,并且保证在生产者完成后打印res中剩余的值。我知道有几种方法可以解决这个问题,但是有没有一种习惯解决这个问题的方法(例如,前哨值,返回余数,while/finally,wrap in class)?当生产者耗尽时,有没有办法发出协程?
现在,我将coprocess函数作为类的一部分,并让res
为实例变量,以便在coprocess函数完成后可以访问它。这有效,但一段时间/最后会更普遍。
def produce_data_from(data, consumer):
next(consumer)
for x in data:
consumer.send(x)
def print_data_cp():
res = []
while True:
x = (yield)
res.append(x)
print(x)
cons = print_data_cp()
produce_data_from(range(10), cons)