0

テーブルに大量のレコードを挿入しなければならない状況があります。挿入物を(オブジェクトの)メンバー関数にラップしました。しかし、それには多くの時間がかかります。これを最適化するために、これらすべてのレコードをクラスのデータ メンバーとして (リストとして) バッファーに保持しています。いいえ。レコードの数が 100 に達したため、一括挿入を行っています。

これがコードです。

class TabDailyQuotes:

    def __init__(self, metadata):
        self.metadata = metadata
        self.indexes = Table('DailyQuotes', metadata, autoload=True)
        self.ins_buf = []
        self.ins = self.indexes.insert()

    def insert(self, dict_data):
        if isinstance(dict_data, types.DictType):
            for key, val in dict_data.items():
                self.ins_buf.append(val)
        else:
            self.ins_buf.append(dict_data)
        if len (self.ins_buf) == 100:
            self.ins.execute(self.ins_buf)
            self.ins_buf = []

    def __del__(self):
        if len (self.ins_buf) > 0:
            self.ins.execute(self.ins_buf)
            self.ins_buf = []

ここでの問題は、1 つのレコードのみを挿入するための関数を呼び出す (および後続のレコードを挿入するための後続の呼び出し) 場合、__del__()魔法の関数を使用して、オブジェクトの寿命の終わりに残りのすべてのレコードを挿入する必要があることです。

これに対処するより良い方法を誰か教えてもらえますか?

4

1 に答える 1

0

__del__が呼び出される保証はありません。したがって、クリーンアップアクションについて明示し、それに対して個別のメソッドを定義し、プログラムがシャットダウンしたとき、またはTabDailyQuotesオブジェクトがスコープ外になったときに呼び出すのが最善です。

参照:

このPythonの__del__の動作がわかりません__del__
でオブジェクトを閉じたり破棄したりしても本当に大丈夫ですか?

于 2013-01-22T18:06:39.947 に答える