0

私の現在の課題は、Python プログラムを継続的に実行することです。これは cron ジョブのようなものになり、内部的には 24 時間ごとに更新されるオブジェクトを持ち、基本的に詳細をファイルに書き込みます。

メモリ管理について必要なアドバイス

  1. シングルプロセスまたはマルチスレッドを使用する必要がありますか。プログラムには並行して実行できるスコープがあるため。継続的に実行されるため、これらのスレッドのメモリ消費について明確にする必要があります。また、各実行後にスレッドのリソースをクリーンアップする必要があります。Python のスレッドで使用できるクリーンアップ方法はありますか。

  2. Python でオブジェクトの割り当てを行う場合、デストラクタについても考慮する必要がありますか。それとも、Python が gc を実行します。

これについてのあなたの考えと、最善のアプローチを教えてください。

4

1 に答える 1

5

あなたの質問には誤解があるようです。

cron ジョブは、一定の時間間隔で実行されるスケジュールされたタスクです。継続的に実行されるプログラムは、起動時に起動されることを除いて、スケジュールする必要はありません。

まず、Python でのマルチスレッドはGILの影響を受けます。そのため、マルチスレッド対応のライブラリ関数を呼び出していないか、計算が I/O バウンド (ディスク アクセス、ネットワーク アクセスなどの入出力によってブロックされることが多い) でない限り、 GIL、スレッド化を使用しても実質的な利益は得られません。ただし、並列計算にはmultiprocessingパッケージの使用を検討する必要があります。その他のオプションは、ライブラリが OpenMP でコンパイルされている場合、またはSCOOPCeleryなどのタスクベースの並列フレームワークを使用している場合の NumPy ベースの計算です。

コメントで述べたように、メモリ管理は Python に組み込まれているため、使用されていないインスタンスや要素を削除することを除けば、メモリ管理について心配する必要はありません。Python は、変数がバインドされていないすべての要素に対してプログラムを自動的にガベージ コレクションします。そのため、必ずそれらを削除するか、スコープから外してください。

補足として、Python のオブジェクト デストラクタには注意してください。他のオブジェクト指向言語とは異なる動作を示す傾向があります。ご利用前に本件をお読みになることをお勧めします。

于 2012-09-06T15:09:03.277 に答える