0

更新するインベントリ データを含む大きな CSV ファイルがあります (35,000 行以上)。インベントリの更新を行うために Mage_Catalog_Model_Convert_Adapter_Productimport を拡張するメソッドを作成しました。次に、高度なプロファイルを使用して、そのメソッドを呼び出す更新を行いました。

プロファイルを手動で実行すると、非常にうまく機能します。問題は、cronjob で実行されているプロファイルを処理する拡張機能を使用すると、システムが CSV ファイルを読み込んで解析するのに時間がかかりすぎることです。cronjob を毎日午前 6 時 15 分に実行するように設定しましたが、ファイルの最初の行は同じ日の午後 1 時 20 分まで処理されず、ファイルの読み込みに 7 時間かかります。

これにより、プロセスが途中で停止し、処理中のレコードが 1/3 未満になります。理由を理解しようとして、問題を解決しようとしていらいらしましたが、うまくいきませんでした。

どんなアイデアでも大歓迎です。

4

1 に答える 1

0

Varien_File_Csv は、csv ファイルを解析するクラスです。メモリがかかりすぎます。

メモリ使用量とピークメモリ使用量を記録する機能、

public function log($msg, $level = null)
{
if (is_null($level)) $level = Zend_Log::INFO;

$units = array('b', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb');
$m = memory_get_usage();
$mem = @round($m / pow(1024, ($i = floor(log($m, 1024)))), 2).' '.$units[$i];
$mp = memory_get_peak_usage();
$memp = @round($mp / pow(1024, ($ip = floor(log($mp, 1024)))), 2).' '.$units[$ip];

$msg = sprintf('(mem %4.2f %s, %4.2f %s) ', $mem, $units[$i], $memp, $units[$ip]).$msg;

Mage::log($msg, $level, 'my_log.log', 1);
}

$MyClass->log('私がログに記録するすべてのメッセージで、メモリは空に近づいています');

csv を分割し (同じファイル名を使用)、ジョブを複数回呼び出すことができます。以前の呼び出しが新しい呼び出しと同時に実行されないようにする必要があります。

ありがとう

于 2012-06-25T01:31:55.957 に答える