异步应用程序编排器
AIOConductor的Python项目详细描述
这是一个小图书馆, 解决单一任务: 异步应用程序的编排。
例如, 我们有申请, 包括数据库, 消息队列, 网络API, 以及背景工作人员。 数据库和消息队列是独立的, 它们可以同时发射。 web api和后台工作程序也相互独立。 但它们都依赖于数据库和消息队列。 所以它们应该在数据库和消息队列之前启动和停止。
这就是使用aioconductor解决这个问题的方法。
fromaioconductorimportConductor,ComponentclassDatabase(Component):asyncdefsetup(self):""" Setup database """asyncdefshutdown(self):""" Shutdown database """classMessageQueue(Component):asyncdefsetup(self):""" Setup message queue """asyncdefshutdown(self):""" Shutdown message queue """classWebAPI(Component):db:Database# Dependencies are declared by type annotations.queue:MessageQueue# Real instances of the components will be injected# during setup routine.asyncdefsetup(self):""" Setup web API """asyncdefshutdown(self):""" Shutdown web API """classBackgroundWorkers(Component):db:Databasequeue:MessageQueueasyncdefsetup(self):""" Setup background workers """asyncdefshutdown(self):""" Shutdown background workers """conductor=Conductor(config={})conductor.add(WebAPI)conductor.add(BackgroundWorkers)conductor.serve()
上面的代码将运行Database和MessageQueue的并发设置, 然后并发设置WebAPI和BackgroundWorkers。 关机将按相反的顺序运行。
conductor还提供了通过替代实现修补组件的能力。 它可以用于测试。
classMessageQueueMock(Component):asyncdefsetup(self):""" Setup message queue mock """asyncdefshutdown(self):""" Shutdown message queue mock """conductor=Conductor(config={})conductor.patch(MessageQueue,MessageQueueMock)# An instance of ``MessageQueueMock`` will be injected into# ``WebAPI`` and ``BackgroundWorkers``, instead of ``MessageQueue``.conductor.add(WebAPI)conductor.add(BackgroundWorkers)conductor.serve()