Pyramid Web フレームワークで__init__.py
、100 MB のオブジェクトを設定に入れました。そのviews.py
オブジェクトをスキャンします。しかし、それはとても遅いです。プリントをビューに入れましたが、スキャンは高速です...ビューが呼び出される前に遅延が発生します。Pyramid は、ビューが呼び出されるまでに約 5 秒かかります。Pyramid は設定をコピーしていますか? メモリ内オブジェクトを から に渡すより良い方法はあり__init__
ますviews
か?
編集:
__init__.py main(global_config, **settings)
私は持っています:
settings['db_info'] = huge_dictionary
そしてviews.pyには次のものがあります:
db_info = request.registry.settings['db_info']
パフォーマンスから判断すると、huge_dictionary 全体をコピーしているに違いありません。これを回避する 1 つの方法は、巨大なオブジェクトをディスクに cPickle してから、ビューで読み戻すことです。オブジェクトをメインメモリに保持する方法があるはずです。
詳細編集: ありがとう、マイケル・メリケル! Pyramid は実際にビューのディスパッチごとに設定をコピーしているようです。私のテストによると、Pyramid は浅いコピーではなく、深いコピーを行っています。次のすべては、同じ非常に遅い時間を示しています。
settings['db_info'] = big_data
settings['db_info'] = [big_data]
settings['db_info'] = {'aa' : [big_data]}
しかし、cPickle を使用するとすぐに機能します。