BaseClass
には、SyncClass
とAsyncClass
の両方に共通するmain_function()
のロジックが含まれています。その2つのクラスがget_data()
という独自の実装を持ち、前者が同期的に取得され、後者が非同期的に取得されるとしましょう。私はこのような何かを書かれているし、動作しているようです:抽象メソッドPythonでの非同期と同期の実装
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ため、これらのメソッドは、()そのように実装されていたので、私は、回避策としてこのコードを使用していました。もっと洗練されたソリューションがありますか?私に関係する私のコードの2つの部分があります:
try:
data = yield self.get_data()
except:
data = self.get_data()
ここではtry/exceptを使用したくないです。
他の事は次のとおりです。同じ機能がBaseClass
で@gen.coroutine
で飾られていない間、私はAsyncClass
で@gen.coroutine
を持っています。
ありがとうございました!