1

Python (2.7) で簡単に拡張可能なモジュール式のコマンドライン アプリケーションを設計しようとしています。各モジュールは「タスク」と呼ばれます。ファイルごとに 1 つのタスクがあり、tasks/ ディレクトリに含まれており、それぞれに のサブクラスとTaskrun()特定のタスクのコード エントリポイントを含むメソッドが含まれています。各「タスクファイル」には、タスクをシステムに登録するために必要なすべてが含まれている必要があります。各タスクには、ヘルプ、使用可能な引数、認証情報、カテゴリなどのメタデータが含まれています。これらは単なる静的プロパティではありません。たとえば、ヘルプ システムはs を使用してヘルプ テキストのTemplates を置き換えます。$variable

コード例を次に示します。

class TestTask(Task):
    description = "This task prints 'Hello world...' and exits."
    help = "Usage: $argv0 $task ...\n ..."

    def __init__(self, arguments=None):
        super(TestTask, self).__init__(description=self.description, arguments=arguments, help=self.help)

    def run(self):
        print("Hello world...")

では、タスクのヘルプを表示するにはどうすればよいでしょうか。または、説明付きのすべてのタスクのリストを取得しますか? ディレクトリを効果的にスキャンし、各タスクをインポート、ロード、およびインスタンス化して、呼び出すgetHelp()getDescription()、それを実行する必要があります。これらのタスクのいくつかは、かなり重いものです。「リスト タスク」の読み込み時間は 1 秒を超えており、目立ちます。私はそれをキャッシュすることを考えましたが、やり過ぎのようです。

これを行うためのよりクリーンで高速な方法は何ですか? どうにかしてタスクのメタデータをキャッシュする必要がありますか? タスクの開発を容易にするために、これをできるだけ動的にしたいと考えています。メタデータを含む内部クラスについて考えましたが、よくわかりません。すべてのタスクのはまだ処理する必要があると思いますが、内部クラスとそれを含む のimport間で情報を共有する適切な方法については明確ではありません。Python を初めて使用するので、何か不足しているのではないかと思っています。プラグイン モデルはどのように設計しましたか? ありがとう!MetaTask

4

1 に答える 1