0

Python 2.7.3 を使用すると、Windows 7 で write() のパフォーマンスが異常に遅くなることがわかりました。これは、Archlinux を使用して私のラップトップで実行している同じコードと比較して、少なくとも 10 倍から 30 倍高速に実行されます。私は何か間違ったことをしていますか、物事を助けるために調整できるパラメーターはありますか? write() の代わりに writelins() を使用する必要がありますか?

具体的なシナリオは次のとおりです。

ファイルの各行に対して、他の 2 つのファイルに 1 行を書き込みます。私は基本的にファイルを再フォーマットしています。

問題のファイルのサイズは約 350MB で、約 200.000 行を含んでいます。Archlinux を実行している私のラップトップでは、このプロセスは約 1 ~ 2 分で完了します。Windows では、22 分で 165MB しか書き込まれませんでした。1回限りであれば問題ないのですが、誰かに譲って実行してもらうので何とか改善できないか考えたいと思います。これらのファイルは 5 つあり、数時間のプロセスを意味します。

関連コード:

    with open('%s/%s.dat' % (cacheDir, f_from), 'r') as old_file:
         with open('%s/%s.dat' % (vectorsDir, f_to), 'w+') as dat_file:
             with open('%s/%s.idx' % (vectorsDir, f_to), 'w+') as idx_file:
                dat_text = ''
                idx_text = ''
                for line in old_file:
                    data = line.split()
                    cats = self.ids[data[0]]
                    dat_line = '%s %s\n' % (string.join(cats,','), string.join(data[1:]))
                    idx_line = '%s\n' % data[0]
                    dat_text += dat_line
                    idx_text += idx_line
                    dat_file.write(dat_line)        
                    idx_file.write(idx_line)
                return dat_text, idx_text
4

1 に答える 1

0

(コメントを回答として再投稿します。)

Windows マシンのメモリ使用量はどのようになっていますか? メモリ内にいくつかの大きな文字列を構築しています。おそらくそれがスワッピングにつながっています。dat_textと にデータを溜めない方が早いですidx_textか?

于 2013-07-08T13:17:59.317 に答える