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)