【发布时间】:2017-04-01 23:17:39
【问题描述】:
假设我有BaseClass,其中包含main_function() 中的一些逻辑,这对于SyncClass 和AsyncClass 都很常见。假设这两个类有其独特的get_data() 实现,前者以同步方式获取,而后者以异步方式获取。我写了这样的东西,它似乎工作:
class BaseClass:
def get_data():
pass
@gen.coroutine
def main_function():
# some logic
try:
data = yield self.get_data()
except:
data = self.get_data()
# some more logic
class SyncClass(BaseClass):
def get_data():
//makes sync call to Mongo and gets data (using Mongoengine)
class AsyncClass(BaseClass):
@gen.coroutine
def get_data():
//makes async call to Mongo and gets data (using Motorengine)
我使用此代码作为解决方法,因为我已经以这种方式实现了 get_data() 的那些方法。有没有更优雅的解决方案?我的代码中有两部分与我有关:
try:
data = yield self.get_data()
except:
data = self.get_data()
我不想在这里使用 try/except。
另一件事是:我在AsyncClass 中有@gen.coroutine,而在BaseClass 中没有用@gen.coroutine 修饰相同的功能。
谢谢!
【问题讨论】:
标签: python asynchronous tornado mongoengine motorengine