我是asyncio的新手,并且使用asyncio协程实现了某种形式的管道。 主要思想是使带有协程的不同管道连接到 在有效负载中聚合信息,然后将有效负载保存在数据库中。
class ExamplePipeline(PipelineBaseClass):
def __init__(self):
PipelineBaseClass.__init__(self)
self.stages = [get_some_info, build_message,n,..,save_to_db]
self.wrapper = self.connect(self.stages)
def connect(self, stages):
def wrapper(*args, **kwargs):
data_out = yield from stages[0](*args, **kwargs)
for stage in stages[1:]:
data_out = yield from stage(data_out)
return data_out
return wrapper
def run(self, data_in):
asyncio.get_event_loop().run_until_complete(self.wrapper(data_in))
每个阶段的功能都是协程,假设类似
@asyncio.coroutine
def get_some_info(payload):
payload = call_an_endpoint
return payload
@asyncio.coroutine
def build_message(payload):
#do some logic
return payload
我有一个新的要求,在某些情况下,build_message co例程 需要分叉其余的管道,这是其余阶段 n..save_to_db必须使用不同的有效负载执行x次,因为 build_message。
[get_some_info, build_message -> payload 1 [n, .. , save_to_db]
payload 2 [n, .. , save_to_db]
payload x [n, .. , save_to_db]
所以最后我在数据库上有x条不同的消息。
如何在这种情况下实现我的新功能?